2017-06-16 77 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。 如果您檢查異常堆棧,您將能夠找到未序列化的對象。

相關問題