我有一个DialogFragment,它允许用户在同一个片段中进行过滤和搜索。过滤器的工作方式是使用回调接口将数据回传给托管活动/片段。这似乎很有效,直到我在DialogFragment中添加了一个SearchView,因为当我输入文本并单击搜索时,它可以工作,但随后抛出以下异常和崩溃:
Parcelable encountered IOException writing serializable object (name = com.braden.android.fragments.ListItemFragment$6)..。
Caused by: java.io.NotSerializableException: com.braden.android.fragments.ListItemFragment为了实现回调,我使用了一个相当标准的回调接口模式。该接口扩展了Serializable。下面是我的回调代码:
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)这里有没有解决办法,或者这只是一个我不好使用的模式。
发布于 2017-06-17 06:57:52
我在这里找到了这个问题的答案:Callback to a Fragment from a DialogFragment
它们的关键是"setTargetFragment“方法,它允许您告诉片段将其结果发送到哪个片段。这使您不必序列化回调的接口引用。
发布于 2017-06-17 07:08:14
类的所有字段都必须序列化,否则会得到NotSerializableException。如果您检查异常堆栈,您将能够找到未序列化对象。
https://stackoverflow.com/questions/44597552
复制相似问题