9

私はこれを呼び出すフラグメントクラスにいます:

@OnClick(R.id.blockedLinkLayout)
public void onBlockedClick(){
    final FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.content, new SettingsBlockedUsersFragment(), FRAGMENT_TAG);
    ft.commit();
}

そして、現在のフラグメントを選択したフラグメントに置き換えるだけです。

私の質問は、StringFragmentTransaction を使用して、親フラグメントから子フラグメントにデータ (値など) を送信するにはどうすればよいですか?

4

4 に答える 4

30

それらをフラグメント引数としてバンドルで渡すだけです

親フラグメント内:

SettingsBlockedUsersFragment fragment = new SettingsBlockedUsersFragment();
Bundle arguments = new Bundle();
arguments.putString( string_key , desired_string);
fragment.setArguments(arguments);
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content, fragment , FRAGMENT_TAG);
ft.commit();

子フラグメント内:

Bundle arguments = getArguments();
String desired_string = arguments.getString(string_key);
于 2016-03-16T16:37:46.963 に答える
0

フラグメントクラスでファクトリメソッドを使用できます(ドキュメントで推奨されているように)

public static YourFragment newInstance(String sample) {
    YourFragment fragment = new YourFragment();
    Bundle args = new Bundle();
    args.putString(KEY, sample);
    fragment.setArguments(args);
    return fragment;
}

次に、YourFragment.newInstance("string you need to pass"); を呼び出します。フラグメントのインスタンスを取得し、それをトランザクションで使用します。

ここで重要なのは、実際に setArguments() メソッドを使用してデータを渡すことです。次に、このデータをフラグメントの oncreate メソッドで次のように取得できます

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        streamSource = getArguments().getParcelable(KEY);
    }
}
于 2016-03-16T16:40:20.010 に答える
0

あなたのSettingsBlockedUsersFragmentクラスには、次のような静的メソッドがあります

public class SettingsBlockedUsersFragment extends Fragment {
    private static final String MY_STRING = "my_string";


    public static SettingsBlockedUsersFragment newInstance(String yourStringValue){
        SettingsBlockedUsersFragment frag = new SettingsBlockedUsersFragment();
        Bundle args = new Bundle();
        args.putString(MY_STRING, yourStringValue);
        frag.setArguments(args);
        return frag;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState){
          Bundle args = getArguments();
          if(args != null){
               String myString = args.getString(MY_STRING);
          }
    }
}

フラグメントトランザクションでは、次のように引数を渡すことができます

final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content,SettingsBlockedUsersFragment.newInstance("my string"), FRAGMENT_TAG);
ft.commit();
于 2016-03-16T16:40:54.767 に答える