我有一个DialogFragment
类,其中包含自定义xml布局。
在onCreateView()中,我引用了一个按钮。单击它以选择文件。
当点击它时会发生两件事:
1)它使用布局inflater将另一个xml布局添加到当前布局中
2)它将三个变量初始化为它们的值ListView
,ListArray
,SimpleAdapter
,这些是在类顶部声明的成员变量。
3)然后它调用getActivity().startActivityForResult()
问题:当我回到对话片段的这个活动时,上面描述的三个变量被设置为null。
以下是正在发生的事情的详细版本:
//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
设置为某个值。它们都是成员变量,因此可以在此类中的任何位置调用。
在onCreateView()
的{{1}}方法内,我会引用对话框的按钮部分并将DialogFragment
附加到按钮上。单击此按钮时,上述三个变量将初始化为其值,并使用setOnClickListener()
记录值。按钮Log.i
也会调用onClick()
以允许我选择一个文件,从而打开一个完全不同的getActivity().startActivityForResult();
。我选择了该文件,并调用了主机Activity
的{{1}}方法,对于我的案例是onActivityResult()
。从这里开始,数据将传递到Activity
:
MainActivity.java
现在我可以访问DialogFragment
内的数据,但@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
DialogFragment
而不是onActivityResult
,上述三个变量都设为null它们仅在按钮单击时初始化,但会调用DialogFragment
,依此类推。我不明白为什么他们被设置回null。我错过了一些重要的东西吗?因此我不能打电话给例如Activity
。如果我在startActivityForResult()
而非simpleAdapter.notifyDataSetChanged()
中执行此操作,则更新我的列表视图的确切方法有效,但我需要在Activity
内执行此操作。此外,欢迎在从另一个活动检索数据后更新listview的任何其他方法。当我选择更多数据时,我只需要一种更新列表视图的方法。
最终更新
我想为我正在做的愚蠢的高度道歉。在我DialogFragment
的托管DialogFragment
中,当Activity
调用MainActivity.java
时,我会创建一个对话框片段的新实例:Activity
这就是为什么你们这些人的方法都没有工作onActivityResult()
这次没有调用。我已将new MyDialogFragment().onActivityResult()
更改为我实际显示的先前初始化的对话框片段,现在一切正常。我将结束这个问题。
答案 0 :(得分:0)
检查请求代码是否是正确的请求代码。您可以申请其他代码
答案 1 :(得分:0)
在您开始活动之前,请尝试使用此功能。
intent.putExtra("return-data", true);