アプリでNavigation Drawerを使用しています。 MainActivityが1つあり、残りはFragmentsです。したがって、問題は、A、B、Cのような3つのフラグメントがあるとします。
現在、Aにはボタンが1つあり、A> Bからデータを送信しています。
たとえば、putSring( "datafrom A"、 "datafrom A");
BでAからデータを受信します。
Bにボタンが1つあり、B> Cからデータを送信しています。
たとえば、putSring( "datafrom B"、 "datafrom B");
CでBからデータを受信します。
次に、Cに1つのボタンがあり、C> Bからデータを送信します。
たとえば、putSring( "datafrom C"、 "datafrom C");
だから、Bのように私は2つの異なるフラグメントからデータを取得しています。私はすべてのアクティビティを使用して試しましたが、startActivityforresultでうまく機能します。しかし、すべてがフラグメントである場合、どのように管理できますか?.
UがフラグメントAからフラグメントBにデータを送信する場合、以下のような同じブール値を使用します。
フラグメントA->フラグメントB
FragmentB ldf = new FragmentB ();
Bundle args = new Bundle();
args.putBoolean("BOOLEAN_VALUE",true);
ldf.setArguments(args);
getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();
そして、uがフラグメントCからフラグメントBにデータを送信する場合、以下のようにフラグメントAからBで使用されるのと同じブール値を使用します。
FragmentC-> FragmentB
FragmentB ldf = new FragmentB ();
Bundle args = new Bundle();
args.putBoolean("BOOLEAN_VALUE",false);
ldf.setArguments(args);
getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();
そして最後に、FragmentBの値がFragment A OR FragemntC
FragmentB
Boolean getValue= getArguments().getBoolean("BOOLEAN_VALUE");
if(getValue)
{
//VALUE RECEIVED FROM FRAGMENT A
}
else
{
//VALUE RECEIVED FROM FRAGMENT C
}
BからフラグメントCを開始するときにsetTargetFragment()を呼び出すことができます。例:
FragmentC fragmentC = FragmentC.newInstance();
fragmentC.setTargetFragment(FragmentB.this, REQUEST_CODE);
getFragmentManager().beginTransaction().replace(R.id.container, fragmentC).commit();
そして、CからフラグメントBにデータを戻す場合、次のコードを呼び出すことができます。
getTargetFragment().onActivityResult(
getTargetRequestCode(),
Activity.RESULT_OK,
new Intent().putExtra("datafrom C", "datafrom C")
);
フラグメントBのonActivityResult()メソッドから取得します。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode==REQUEST_CODE && resultCode==Activity.RESULT_OK) {
String datafromC = data.getStringExtra("datafrom C");
}
}