Объединение ListActivity и ActionBarActivity
В настоящее время я строю минимум SDK
из 10, поэтому я должен использовать библиотеку android-support-v7-appcompat
для реализации ActionBar
. Я установил ActionBar
, но теперь хочу добавить ListActivity
, но для этого требуется расширение моего класса, а Java не имеет нескольких inheritance
. Что мне делать?
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
getSupportActionBar().setIcon(R.drawable.ic_action_search);
getSupportActionBar().setDisplayShowHomeEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
}
Ответы
Ответ 1
ListActivity не была перенесена в AppCompat. Вероятно, потому что вы должны считать его "устаревшим", а вместо этого использовать ListFragment.
Фрагменты будут работать с ActionBarActivity, просто убедитесь, что они являются фрагментами из библиотеки поддержки.
Прочитайте эту ссылку о фрагментах.
В вашем случае использования я просто определяю фрагмент в xml.
Ответ 2
Самый простой способ сделать это - использовать ListFragment
внутри ActionBarActivity
. Я сделал это так:
public class MyActivity extends ActionBarActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
MyFragment fragment = new MyFragment();
getSupportFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commit();
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: {
finish();
break;
}
default: {
break;
}
}
return true;
}
public static class MyFragment extends ListFragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
public void onListItemClick(ListView listView, View view, int position, long id) {
...
}
}
}
Таким образом вам даже не нужен xml для него, и он работает хорошо.