2017-04-23 8 views
1

Fragmentを保持するViewPagerがあります。 ViewPagerは、ViewPager - FragmentStatePagerAdapterとローテーションの処理

アダプターのgetItemメソッドのアダプターを持っています。

@Override 
public Fragment getItem(int position) { 
    String text= dbHelper.getText(position); 
    CustomFragment frg = new CustomFragment(text); 
    return frg; 
} 

アダプターのgetItemメソッドでフラグメントを初期化しています。

すべてが完全に機能します。

しかし向きが変わった場合、初期化されたフラグメントを復元する代わりに、CustomFragmentがデフォルトのコンストラクタCustomFragmentを使用して作成されます。これにより、ダミーデータを含むフラグメントが作成されます。

この理由は何ですか? 以前に作成したフラグメントを復元するにはどうすればよいですか?

public static CustomFragment newInstance(String text) { 
    Bundle arguments = new Bundle(); 
    arguments.put("someText", text); 

    CustomFragment fragment = new CustomFragment(); 
    fragment.setArguments(arguments); 

    return fragment; 
} 

onCreate()方法でと引数を取得し、あなたがフラグメントで好きな初期化するために、それを処理:

答えて

1

あなたFragment Sを初期化するための理想的な方法は以下のようなファクトリメソッドを作成することです。

このようにして、構成の変更時にフラグメントが再作成された場合、引数は保持され、はonCreate()メソッドが呼び出されたときに自動的に処理されます。

最新のツールを使用している場合、同じことについてリントの警告が表示されている場合があります。

+0

@ salih-erikci試してみましたか? –

+1

はい、私はあなたの方法を使用し、それは働いた。あなたが言ったように、これはフラグメントを初期化するのに理想的で推奨される方法でなければなりません。ありがとう –

関連する問題