私のアプリは1つのアクティビティAと2つのフラグメントF1とF2を持っています。インターフェイスを持つ2つのフラグメント間の通信
F1のクリックボタンを1つ押すと、F1がF2に置き換えられます。 F1からF2にデータを転送したいとします。 F2は、ヌルのままにそのため、私はF1にインターフェースを実装しA.
におけるそのメソッドをオーバーライドしかしF2からデータを送信し、私の基準(コードでsFragment)によるれますデータはF2に送信されません。 F1をF2に置き換えながら、TAGを使用してF2への参照を取得しています。
まだ作成していないF2への参照を取得しようとしているようなライフサイクルと関係がありますか?
F1
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.form_fragment1,container,false);
nextB = (Button) v.findViewById(R.id.f1Next);
nextB.setOnClickListener(this);
return v;
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.f1Next:
SFragment fragment = new SFragment();
FragmentManager mManager = getFragmentManager();
FragmentTransaction mTransaction = mManager.beginTransaction();
mTransaction.replace(R.id.fragment_container,fragment,"SecondF"); // SecondF
mTransaction.addToBackStack(null); // this is required to move to the previous fragment
mTransaction.commit();
commListener.PlaceName(data1,data2); //passing value to activity
break;
}
}
interface CommBridge{
void PlaceName(String data1,String data2);
}
@Override
public void onAttach(Context context){
super.onAttach(context);
if (context instanceof CommBridge){
commListener= (CommBridge) context;
}
}
}
@Override
public void PlaceName(String data1, String data2) {
SFragment sFragment=(SFragment) getFragmentManager().findFragmentByTag("SecondF");
if (sFragment != null && sFragment.isInLayout()){
Log.d("STATE","1");
sFragment.setPlace(data1,data2);
}else{
Log.d("STATE","2"); // this is always the case
}
F2
public class SFragment extends Fragment {
String Place2,Place1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.form_fragment2,container,false);
return v;
}
void setPlace(String data1, String data2){
place1 = data1;
place2 = data2;
}
}
使用すると、1つのフラグメントトンからデータを送信するために 'Bundle'を使用する必要があります別の断片。 – Shailesh