0

なぜそれがputIntをバンドルする必要があるのか​​知りたいのですが。私は他のタブにスワイプすると、私のフラグメントが再作成されたのか、最後に使われたのでしょうか?空のコンストラクタがこれで使用されたのはなぜですか?フラグメント作成について

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0 : return fragment_zg.newInstance(position + 1); 
      case 1: return fragment_Uni.newInstance(position+1); 
      default: return fragment_zg.newInstance(position + 1); 
    } 
} 

そしてここでは、私のやり方ので、フラグメントは、Androidシステムで再現されているFragment

public class fragment_Uni extends Fragment { 
    private static final String ARG_SECTION_NUMBER = "section_number"; 
    public fragment_Uni() {} 

    public static fragment_Uni newInstance(int sectionNumber) { 
     fragment_Uni uni_fragment = new fragment_Uni(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
     uni_fragment.setArguments(args); 
     return uni_fragment; 
    } 
} 
+0

あなたが求めているのはどちらですか? –

+0

申し訳ありませんが、バンドルargs = new Bundle(); args.putInt(ARG_SECTION_NUMBER、sectionNumber);uni_fragment.setArguments(args); – Zayar

+0

あなたがそうしないと引数を使う必要はありません。デバイスの向きを変更するには、空の/空のコンストラクタをフラグメントマネージャに1つ用意する必要があります。あなたがオリエンテーションを変えたかどうかは関係ありません。 –

答えて

0

私はなぜそれを束にする必要があるのか​​知りたい。

あなたはFragmentにいくつかの値を渡したいなら、あなたはその後、Fragmentの引数として設定されているBundleを使用する必要があります。それ以外の場合、引数はFragmentレクリエーションで保持されません。 Fragmentに引数が必要ない場合、または必須ではない場合はBundleを省略できます。

他のタブにスワイプすると、フラグメントが再作成されるか、最後に が作成されますか?

最後に作成したものを使用しますが、更新する場合はページアダプタを更新する必要があります。それ以外の場合、データは更新されません。

これで空のコンストラクタが使用されたのはなぜですか?

これはFragmentに必要なデフォルトのコンストラクタです。

+0

それは私にとって最高の答えです!ありがとう!!! – Zayar

+0

それは私の喜びです – ViramP

-1

。 Androidがフラグメントを再作成すると、reflection(Java reflection API)を使用してフラグメントが再構成されるため、コンストラクタには引数がありません(他の方法で使用する方法がないため)。だからなぜ断片的な議論の必要性?引数はBundleオブジェクトに格納されています.Androidは再作成方法を知っているので、Bundleを使用するのはAndroidで、引数バンドルをフラグメントに再度渡すだけで、フラグメントは格納された値を使用して再作成されます。

+0

@Downvoter私はあなたが私の答えをdownvoteする理由を知りたいです。ユーザーは、引数のないコンストラクタとBundleについての理由を尋ねました。そのため、なぜdownvoteがわかりません。 – josemgu91

+0

setArgument(bundle)は、前回の作成時に存在していたフラグメント値を復元しますか? – Zayar

+0

正確ではありません。フラグメント引数バンドルにデータを格納すると、フラグメントを復元するときに引数バンドルが再び渡されるため、最後の値がそこにあります(ホームボタンを押したときやAndroidがあなたのアプリケーションをキャッシュに置くなど)。これはAndroidがBundleオブジェクトを保存して復元する方法を知っているからです。それがBundleが使われる理由です。 – josemgu91

0

Fragmentには常にデフォルトコンストラクタが必要ですが、他のコンストラクタは使用できません。そのため、静的メソッドを使用してインスタンスを作成し、引数を渡します。

この理由は、インスタンスを保持してデータをバンドルとして簡単に保存するためです。

詳細については、this questionを参照してください。

編集: この場合、スワイプするたびに新しいFragmentが作成されます。フラグメントを保持したい場合は、Fragmentをシングルトンにする必要があります。

関連する問題