在onActivityResult之后,值设置为null

时间:2014-11-05 06:38:16

标签: java android listview simpleadapter onactivityresult

我有一个DialogFragment类,其中包含自定义xml布局。 在onCreateView()中,我引用了一个按钮。单击它以选择文件。 当点击它时会发生两件事: 1)它使用布局inflater将另一个xml布局添加到当前布局中 2)它将三个变量初始化为它们的值ListViewListArraySimpleAdapter,这些是在类顶部声明的成员变量。 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()之前所看到的那样,将三个变量SimpleAdapterListViewArrayList设置为某个值。它们都是成员变量,因此可以在此类中的任何位置调用。 在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()更改为我实际显示的先前初始化的对话框片段,现在一切正常。我将结束这个问题。

2 个答案:

答案 0 :(得分:0)

检查请求代码是否是正确的请求代码。您可以申请其他代码

答案 1 :(得分:0)

在您开始活动之前,请尝试使用此功能。

intent.putExtra("return-data", true);