【发布时间】:2014-11-05 06:38:15
【问题描述】:
我有一个带有自定义 xml 布局的 DialogFragment 类。
在 onCreateView() 我得到一个按钮的引用。您单击它以选择文件。
当它被点击时,会发生两件事:
1)它使用布局充气器将另一个xml布局添加到当前布局中
2)它将三个变量初始化为它们的值ListView,ListArray,SimpleAdapter,这些是在类顶部声明的成员变量。
3) 然后调用getActivity().startActivityForResult()
问题:当我回到对话框片段的这个活动时,上述三个变量被设置为空。
这里是正在发生的事情的详细版本:
//before calling startActivityForResult()
I/NULLTEST SIMPLEADAPTER﹕ android.widget.SimpleAdapter@64cf1348
I/NULLTEST ATTACHMENTSLISTVIEW﹕ android.widget.ListView{64d1c2e0 VFED.VC. ......I. 0,0-0,0 #7f090014 app:id/attachmentsListView}
I/NULLTEST ATTACHMENTSLISTARRAY﹕ [{a_date_added=Added: Nov 1, a_name=My test file 0}, {a_date_added=Added: Nov 2, a_name=My test file 1}, {a_date_added=Added: Nov 3, a_name=My test file 2}]
// Inside onActivityResult()
I/NULLTEST SIMPLEADAPTER ONRESULT﹕ null
I/NULLTEST ATTACHMENTSLISTVIEW ONRESULT﹕ null
I/NULLTEST ATTACHMENTSLISTARRAY ONRESULT﹕ []
整个代码在DialogFragment 中被调用。正如您在调用startActivityForResult() 之前在上面看到的,三个变量SimpleAdapter、ListView 和ArrayList 被设置为某个值。它们都是成员变量,因此可以在此类中的任何位置调用。
在DialogFragment 的onCreateView() 方法中,我引用了对话框的按钮部分并将setOnClickListener() 附加到按钮上。单击此按钮时,上述三个变量将初始化为其值,我使用Log.i 记录这些值。按钮onClick() 也调用getActivity().startActivityForResult(); 以允许我选择一个文件,从而打开一个完全不同的Activity。我选择文件并调用主机Activity 的onActivityResult() 方法,在我的情况下是MainActivity.java。从这里将数据传递到DialogFragment,如下所示:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
现在我可以访问DialogFragment 中的数据,但在DialogFragment 的onActivityResult 中而不是Activity 中,上述三个变量设置为null,但它们仅在按钮单击时初始化但那会调用startActivityForResult() 等等。我不明白为什么它们被设置回null。我在这里错过了一些重要的事情吗?因此,我不能打电话给例如simpleAdapter.notifyDataSetChanged()。如果我在Activity 而不是DialogFragment 中执行此操作,那么这种更新列表视图的确切方法有效,但我需要在DialogFragment 中执行此操作。在从另一个活动检索数据后更新列表视图的任何其他方式也是受欢迎的。当我选择更多数据时,我只需要一种方法来更新该列表视图。
最终更新
我想为我所做的愚蠢行为道歉。在我的主机Activity 即MainActivity.java 中,当这个Activity 调用onActivityResult() 时,我将创建一个对话框片段的新实例,如下所示:new MyDialogFragment().onActivityResult() 显然这就是为什么你们的方法都没有起作用的原因onCreateView 这次没有被调用。我已将 new MyDialogFragment() 更改为我实际显示的先前初始化的对话框片段,现在一切正常。我将结束这个问题。
【问题讨论】:
标签: java android listview simpleadapter onactivityresult