2016-04-13 10 views
2

今日は、私は次のエラーを受け取った:私のフラグメントのコンストラクタは空ではないので、私は、コンストラクタについての私のListFragmentでいくつかのデータを表示するには、アダプタを提出 どのようにアダプタをバンドルに入れることができますか?

Unable to instantiate fragment: make sure class name exists, is public, and has an empty constructor that is public

。だから、バンドルにアダプタを保存する関数を書く必要がありますが、どうすればこれを処理できますか?

public class AllMedicationsFragment extends ListFragment { 
    MyAdapter myAdapter; 

     public static final MyFragment newInstance(MyAdapter adapter) { 
     MyFragment myFragment = new MyFragment(); 
     Bundle bdl = new Bundle(1); 
     bdl.put??(adapter); 
myFragment.setArguments(bdl); 
return myFragment; 
    } 

私は、私は別のアクティビティで呼び出さTimePickerFragmentを実施して以来、このエラーが発生します。

+0

? –

+0

私は別のアクティビティのデータでアダプタを埋めるので、 – developKinberg

+0

あなたは間違って不必要にフラグメントの実装とそのアクティビティを結合しています。代わりに、そのアクティビティからデータを戻し、データをアダプタに渡す必要があります。 –

答えて

3

あなたはそうではありません。アダプタにフラグメントを渡す理由や意味はありません。あなたが必要と思うなら、あなたはほとんど確かにあなたのアーキテクチャを台無しにしてしまいます。アダプターはビューに結びつけられ、そのビューを所有しているフラグメントのみがそれにアクセスする必要があります。

殺害された場合に状態を保存するなどの操作を行う場合は、リストにマッピングしているデータまたはそのデータを再作成するために必要なデータを保存してください再フェッチするURL)、再起動時に新しいアダプタを作成します。

1

正しく理解すれば、アダプタが管理するデータをバンドルに入れようとしています。

これは、Parcelablesが便利な場所です。

カスタムアダプタを作成して、パーセルブルのリストを管理することができます。ような何か:

​​

次にような何か:なぜあなたはフラグメントへの引数としてアダプタを渡そうとしている

Bundle bdl = new Bundle(1); 
bdl.putParcelableArray("YOUR_KEY", adapter.dataAsParcelableArray()); 
関連する問題