0

Fragment が作成される前に、パラメータや引数を Fragment に送信する方法を考えていました。文字列の配列をフラグメントに渡して、作成時にすべての文字列をレイアウトに配置できるようにするためです。たとえば、Leaderboard フラグメントを作成しています。私のアクティビティは、フラグメントが表示するために使用するすべてのスコアなどを渡します。Bundle と .setArgs を使用できることは理解していますが、私の場合はうまくいきますか? ありがとうございました

** 編集 **

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View singleplayerView = inflater.inflate(R.layout.singleplayer_tab, container, false);
        String[] scores = (String[]) getArguments().get("scores");
        TextView tview = (TextView) singleplayerView.findViewById(R.id.player_name0);
        tview.setText(scores[0]);
        setupRank(singleplayerView);
        return singleplayerView;
    }

    public static SingleplayerTab newInstance(String[] scores) {
        SingleplayerTab spt = new SingleplayerTab();
        Bundle args = new Bundle();
        args.putStringArray("scores", scores);
        spt.setArguments(args);
        return spt;
    }

それを呼び出すコード

String[] scores = {"hello"};
Fragment singlePlayerFragment = SingleplayerTab.newInstance(scores);
4

1 に答える 1

2

Bundle と .setArgs を使用できることは理解していますが、私の場合はうまくいきますか?

AはまたはBundleを保持できます。String[]ArrayList<String>

さらに、これはカスタム コンストラクターではなく、行うべき方法です。Android は、構成の変更 (画面の回転など) でフラグメントを自動的に再作成し、そのために public のゼロ引数コンストラクターを使用します。したがって、引数などを使用しない限りBundle、構成の変更時に文字列配列が失われます。

これに推奨されるアプローチは、次のようなファクトリ メソッドを使用することEditorFragmentです。

  static EditorFragment newInstance(int position) {
    EditorFragment frag=new EditorFragment();
    Bundle args=new Bundle();

    args.putInt(KEY_POSITION, position);
    frag.setArguments(args);

    return(frag);
  }

int positionこの場合、フラグメントに渡したいと思います。Bundleこれをファクトリ メソッド ( )にパッケージ化することを分離しnewInstance()ます。このフラグメントのインスタンスを作成する必要があるときは、EditorFragment.newInstance()代わりにを呼び出すnew EditorFragmentので、position. 私のフラグメントは、から値positionを読み取ることで を取得できます。私はこのアプローチを (他の場所の中でも)このサンプル プロジェクトで使用し、10 個のこれらのエディターを.KEY_POSITIONgetArguments() BundleViewPager

于 2013-05-26T06:25:45.557 に答える