Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ListFragment如何获取listView?_Java_Android - Fatal编程技术网

Java ListFragment如何获取listView?

Java ListFragment如何获取listView?,java,android,Java,Android,我正在将我的应用程序从AsyncTasks移植到Fragements 但是如何访问片段中的listView(id:list)元素呢 class MyFragment extends ListFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.

我正在将我的应用程序从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:


onCreateView
文档保留时:

creates and returns the view hierarchy associated with the fragment
因此,由于该方法不返回,您将无法通过
getListView()
访问
ListView
。您可以在
onActivityCreated
回调中获取有效引用。
或者您可以尝试使用
v.findViewById(android.R.id.list)
如果
ListView
是在
list\u fragment.xml

从视图中获取列表视图中声明的,那么您就更早了

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.

我可以通过OnViewCreated方法访问ListView。

解决此问题的最简单、更可靠的方法是重写onActivityCreated();然后在那里进行列表操作

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

我使用onActivityCreate并获得contentview not created崩溃,即使使用带有100毫秒等待的postdelayed方法,这似乎是最适合我的解决方案。根据文件<返回onCreateView(LayoutFlater、ViewGroup、Bundle)后,但在将任何保存的状态还原到视图之前,会立即调用code>onViewCreated。这使子类有机会在知道其视图层次结构已完全创建后初始化自己。但是,此时片段的视图层次结构并未附加到其父级。
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.
@Override
public void onActivityCreated(Bundle savedInstanceState) {
    ListView listView = getListView(); //EX: 
    listView.setTextFilterEnabled(true);
    registerForContextMenu(listView);
    super.onActivityCreated(savedInstanceState);
}
ListFragment listFrag = new ListFragment(){
        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            ListView list = getListView();
            // DO THINGS WITH LIST
        }
    };