ListFragment, как получить listView?

Я переношу свое приложение из AsyncTasks в Fragements.

Но как я могу получить доступ к элементу listView (id: list) внутри моего фрагмента?

class MyFragment extends ListFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.list_fragment, container, false);
        ListView listView = getListView(); //EX: 
        listView.setTextFilterEnabled(true);
        registerForContextMenu(listView);
        return v;
    }
}

XML

        <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

Пример:

Caused by: java.lang.IllegalStateException: Content view not yet created

Ответы

Ответ 1

поскольку doc onCreateView остается:

creates and returns the view hierarchy associated with the fragment

так как метод не возвращается, вы не сможете получить доступ к ListView через getListView(). Вы можете получить действительную ссылку в обратном вызове onActivityCreated. Или вы можете попробовать использовать v.findViewById(android.R.id.list), если ListView объявлен внутри list_fragment.xml

Ответ 2

Получить список Просмотр из представления, который вы получаете раньше.

View view = inflater.inflate(android.R.layout.list_content, null);
    ListView ls = (ListView) view.findViewById(android.R.id.list);
    // do whatever you want to with list.

Ответ 3

Самое простое и надежное решение этой проблемы - переопределить onActivityCreated(); и делайте там свои манипуляции с списком.

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    ListView listView = getListView(); //EX: 
    listView.setTextFilterEnabled(true);
    registerForContextMenu(listView);
    super.onActivityCreated(savedInstanceState);
}

Ответ 4

Я смог получить доступ к ListView с помощью метода OnViewCreated.

Ответ 5

ListFragment listFrag = new ListFragment(){
        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            ListView list = getListView();
            // DO THINGS WITH LIST
        }
    };