Java ListFragment如何获取listView?
我正在将我的应用程序从AsyncTasks移植到Fragements 但是如何访问片段中的listView(id:list)元素呢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.
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
}
};