Как совместить ListFragment и AppCompatActivity?

Это очень нубский вопрос. Я использую ListFragment, чтобы показать список разных вещей в моем приложении. Теперь я хочу применить материальный дизайн, используя панель приложений (панель инструментов) вместо панели действий, чтобы поддерживать широкий спектр устройств. В документации Google, чтобы использовать панель приложений, активность должна расширять AppCompatActivity. . Но я уже расширил ListFragment в своем коде следующим образом:

public class BookListFragment extends ListFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        BookAdapter adapter = new BookAdapter(getActivity(), bookList, 0);
        setListAdapter(adapter);
}

Итак, как я могу расширить AppCompatActivity в моем BookListFragment?


person novice20    schedule 17.11.2015    source источник
comment
ListFragment — это фрагмент, и его не нужно менять. Вы имеете в виду ListActivity?   -  person Jörn Buitink    schedule 17.11.2015
comment
Как сказано выше, это фрагмент, и вы не можете просто изменить его на AppCompatActivity, но если вы используете ListActivity из библиотеки поддержки (я не знаю, есть ли в нем эта активность), то активность уже распространяется из AppCompatActivity.   -  person Шах    schedule 17.11.2015
comment
Если в библиотеке поддержки нет ListActivity, вы можете просто использовать AppCompatActivity с ListView или RecyclerView.   -  person Шах    schedule 17.11.2015


Ответы (1)


Вы можете расширить AppCompatActivity без проблем:

Вставьте список в XML-файл макета вашей деятельности. У вас уже есть один (потому что вы использовали ListActivity), поэтому измените его идентификатор:

<ListView android:id="@+id/activity_list"></Listview>

теперь используйте этот ListView в своей деятельности:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ListView lv = (ListView) findViewById(R.id.activity_list);
    BookAdapter adapter = new BookAdapter(getActivity(), bookList, 0);
    lv.setAdapter(adapter);
}
person Jörn Buitink    schedule 17.11.2015
comment
спасибо, но теперь он показывает, что ошибка не может разрешить метод findViewById (int). - person novice20; 17.11.2015
comment
не забудьте добавить setContentView() непосредственно под super.onCreate(savedInstanceState), иначе findViewById() не имеет ссылки на то, откуда он должен найти свои представления. - person Thijs Koppen; 17.11.2015