为什么从对话片段运行时,列表片段上的 getActivity() 不起作用



我的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();

最新更新