Подтвердить что ты не робот

Объединение 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);
   }

 }
4b9b3361

Ответ 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 для него, и он работает хорошо.