1

私はDialogFragmentを使用して、同じフラグメントでフィルタリングして検索することができます。フィルタは、コールバックインタフェースを使用して、データをホスティングアクティビティ/フラグメントに戻すことによって機能します。私はテキストを入力し、検索をクリックしたとき、それは動作しますが、その後、次のexpceptionやクラッシュを投げるように私はDialogFragmentにSearchViewを追加するまで、これは偉大な仕事に見えた:コールバックを使用してDialogFragment(アンドロイド)のデータを返す

Parcelable encountered IOException writing serializable object (name = com.braden.android.fragments.ListItemFragment$6) 

...

Caused by: java.io.NotSerializableException: com.braden.android.fragments.ListItemFragment 

へコールバックを行う私は、かなり標準的なコールバックインターフェイスパターンを使用しました。インタフェースはSerializableを継承します。ここに私のコールバックのコードは次のとおりです。

1)なぜそれは私だけだということです。

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を実装し、匿名の内部クラスを使用してとは何かを持っているようです私がSearchViewを使用しているときにこの例外を受け取り、コールバックを介してデータを返すアクションを実行したり、単にダイアログをクリックしたりしないでください。

2)ここに回避策がありますか、これはちょうど私にとって使いにくいパターンです。

答えて

0

私はここにこの質問への答えを見つけた:Callback to a Fragment from a DialogFragment

彼らキーを使用して、フラグメントがにその結果を送信するための断片を伝えることを可能にする「setTargetFragment」方法です。これにより、コールバックのインタフェース参照をシリアル化する必要がなくなります。

0

クラスのすべてのフィールドをシリアル化する必要があります。そうでない場合は、NotSerializableExceptionが発生します。 例外スタックをチェックすると、シリアル化されていないオブジェクトを見つけることができます。

関連する問題