私はこれを呼び出すフラグメントクラスにいます:
@OnClick(R.id.blockedLinkLayout)
public void onBlockedClick(){
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content, new SettingsBlockedUsersFragment(), FRAGMENT_TAG);
ft.commit();
}
そして、それは私の現在のフラグメントを選択したものに置き換えるだけです。
そして私の質問は、FragmentTransactionを使用して、親フラグメントから子フラグメントにデータ(String
valueなど)を送信するにはどうすればよいですか?
それらをフラグメント引数としてバンドルで渡すだけです
親フラグメント内:
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);
FragmentTransaction
は単にフラグメントを遷移させるためのものであり、何も「パス」しません。 Bundle
を使用する必要があります。
SettingsBlockedUsersFragment frag = new SettingsBlockedUsersFragment();
Bundle b = new Bundle();
// put stuff into bundle...
b.putString("user", "steve");
// Pass the bundle to the Fragment
frag.setArguments(b);
// Use Fragment Transaction
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content, frag, FRAGMENT_TAG);
ft.commit();
次に、フラグメントのonCreate内で、次のことができます。
String user = getArguments().getString("user");
データをフラグメントに渡す他の方法については、 新しいAndroidフラグメント をインスタンス化するためのベストプラクティス)で説明しています。
フラグメントクラスでファクトリメソッドを使用できます(ドキュメントで推奨されています)
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( "渡す必要のある文字列");を呼び出します。フラグメントのインスタンスを取得し、それをトランザクションで使用します。
ここで重要なのは、実際にはsetArguments()メソッドを使用してデータを渡すことです。次に、このデータをフラグメントのoncreateメソッドで次のように取得できます。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
streamSource = getArguments().getParcelable(KEY);
}
}
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();