首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用回调在DialogFragment中回传数据(安卓)

问使用回调在DialogFragment中回传数据(安卓)
EN

Stack Overflow用户
提问于 2017-06-17 04:33:27
回答 2查看 1.6K关注 0票数 1

我有一个DialogFragment,它允许用户在同一个片段中进行过滤和搜索。过滤器的工作方式是使用回调接口将数据回传给托管活动/片段。这似乎很有效,直到我在DialogFragment中添加了一个SearchView,因为当我输入文本并单击搜索时,它可以工作,但随后抛出以下异常和崩溃:

代码语言:javascript
复制
Parcelable encountered IOException writing serializable object (name = com.braden.android.fragments.ListItemFragment$6)

..。

代码语言:javascript
复制
Caused by: java.io.NotSerializableException: com.braden.android.fragments.ListItemFragment

为了实现回调,我使用了一个相当标准的回调接口模式。该接口扩展了Serializable。下面是我的回调代码:

代码语言:javascript
复制
private void displayFilter() {

    FilterCategoryDialogFragment filterCategoryDialogFragment = new FilterCategoryDialogFragment();
    Bundle bundle = new Bundle();

    mOnFilterClickListener = new OnFilterClickListener() {
        @Override
        public void onCategoryClickListener(String filterName) {
            updateVenues(mFilter);
        }
    };

bundle.putSerializable("listenerFilter", 
mOnFilterClickListener);
filterCategoryDialogFragment.setArguments(bundle);
    filterCategoryDialogFragment.show(getFragmentManager(), DIALOG_CATEGORY_FILTER);
}

这似乎与使用实现serializable的匿名内部类有关,所以我想知道:

1)为什么只有当我使用SearchView时才会收到这个异常,而不是当我通过回调或简单地单击对话框来执行发回数据的操作时收到这个异常。

2)这里有没有解决办法,或者这只是一个我不好使用的模式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-17 06:57:52

我在这里找到了这个问题的答案:Callback to a Fragment from a DialogFragment

它们的关键是"setTargetFragment“方法,它允许您告诉片段将其结果发送到哪个片段。这使您不必序列化回调的接口引用。

票数 0
EN

Stack Overflow用户

发布于 2017-06-17 07:08:14

类的所有字段都必须序列化,否则会得到NotSerializableException。如果您检查异常堆栈,您将能够找到未序列化对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44597552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档