【问题标题】:Why doesn't getActivity() on a listfragment work when ran from a dialogfragment为什么从对话框片段运行时列表片段上的 getActivity() 不起作用
【发布时间】:2013-12-04 06:28:51
【问题描述】:

我的 ListFragment 位于 viewpager 中,并且操作栏有一个打开对话框片段的按钮。然后我尝试使用非静态方法调用一个函数,以从该对话框片段更新我的简单适配器,如下所示:

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 方法,并在更新程序函数上使用该上下文而不是 getActivity。我在该函数中添加了几个 System.out.printlns,它们打印得很好,但列表视图本身仍然没有更新。不明白为什么,因为我知道的片段似乎是活动的(或附加的),并且从片段本身运行时该功能工作正常。

【问题讨论】:

    标签: java android android-fragments


    【解决方案1】:

    我发现arraylist初始化没有正确完成..

    希望你试试这个……

    如果发布您的构建数据方法发生任何错误。它将被修复。

      ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
      list = buildData();
    

    【讨论】:

    • 感谢您的回答!如果不修复,这可能会导致其他一些问题。我通过添加Context context = getActivity(); System.out.println(context); System.out.println(list) 对此进行了测试,并且上下文显示为空。列表打印正常。
    猜你喜欢
    • 2016-12-20
    • 1970-01-01
    • 2015-10-21
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2022-01-21
    相关资源
    最近更新 更多