2017-06-16 78 views
1

我有一个DialogFragment,允许用户在同一个Fragment中筛选和搜索。过滤器通过使用回调接口将数据传回主机活动/片段来工作。这似乎工作的伟大,直到我增加了一个搜索查看到DialogFragment当我输入文字,点击搜索它的工作原理,但随后引发以下expception和崩溃:使用回调传回DialogFragment中的数据(android)

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); 
} 

这似乎有事情做与使用实现匿名内部类序列化的,所以我想知道:

1)为什么说我只有我当我使用SearchView时收到此异常,而不是执行通过回调发送回数据的操作,或者只是单击对话框。

2)有没有解决方法,或者这只是一个坏模式供我使用。

回答

0

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

他们的关键是“setTargetFragment”的方法,它允许你告诉发送其结果到片段的片段。这样可以避免为回调序列化接口引用。

0

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

相关问题