fkm blog

software開発に関することを書いていきます

ゼロからFragment(4)

Activityの遷移時, Intentにいろいろ値を詰め込むことでパラメータを渡すようなことができたけど, それをFragmentでやってみる.

ぱっと思いつきそうなのが, 自分で実装したFragmentクラスにsetterを付けちゃう案.

でもこれだと画面回転でActivity/Fragmentが破棄された際にうまくいかない.

正しいやりかたはこんな感じでsetArguments()でセットする方法. 半強制にしたい場合はnewInstance()メソッドに引数をつけて, インスタンス生成と一緒にセットしちゃうのがおすすめ

ログイン画面でアクセストークンを取得し, それを次の画面に渡す というシナリオだとこんな感じ. まずは呼び出し側.

private void performLogin() {
    // login process
    // app will get an access token 
    String token = "dummyToken";
        
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
        
    transaction.replace(R.id.main, MainFragment.newInstance(token));
        
    transaction.commit();
}

MainFragmentのnewInstance()に引数を追加した.

で, MainFragment側

public static MainFragment newInstance(String token) {
    MainFragment fragment = new MainFragment();
        
    Bundle args = new Bundle();
    args.putString(ARGS_TOKEN, token);
    fragment.setArguments(args);
        
    return fragment;
}

Bundleインスタンスを作って, putして, fragmentにセット.