我的ListFragment在一个视图寻呼机中,操作栏有一个打开对话框片段的按钮。然后我试着用非静态方法调用一个函数,从对话片段更新我的简单适配器,如下所示:
MyDialogFragment.java
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.dialogtitle);
builder.setSingleChoiceItems(R.array.items, indx, new DialogInterface.OnClickListener() {
MyListFragment updateItems = new MyListFragment();
public void onClick(DialogInterface dialog, int id) {
updateItems.updater();
dialog.dismiss();
...
}
}
MyListFragment.java
public void updater(){
ArrayList<Map<String, String>> list = buildData();
String[] from = { "name", "address", "postalcode", "item", "item2", "item3" };
int[] to = { R.id.title, R.id.address, R.id.postalcode, R.id.item1, R.id.imageView1, R.id.item3 };
ListAdapter adapter = new SimpleAdapter(getActivity(), list,
R.layout.rowlayout, from, to);
setListAdapter(adapter);
}
ListAdapter adapter = new SimpleAdapter(getActivity(), list, R.layout.rowlayout, from, to)
行给我空指针异常。
应该附加片段,因为我尝试了通过在每个步骤中添加System.out.println("onAttach")
(或onResume等)来实现片段的生命周期,以确保打开对话框时片段的状态不会更改。
我还在这个列表片段中添加了一个按钮来执行"updater();"
,它按预期工作
有什么好主意吗?为什么从不同的片段运行时不起作用?
谢谢你的帮助!
编辑
通过添加Context context;
到ListFragment的开头,context = getActivity();
到onCreate方法,并在updater函数上使用该上下文而不是getActivity。我向该函数添加了几个System.out.printlns,它们打印得很好,但列表视图本身仍然没有更新。我不明白为什么,因为我所知道的片段似乎是活动的(或附加的),并且当从片段本身运行时,函数运行良好。
我发现arraylist初始化没有正确完成。。
希望你试试这个。。。
如果在发布您的构建数据方法时出现任何错误。它将被修复。
ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
list = buildData();