Mon application a une activité A et deux fragments F1 et F2.Communication entre deux fragments avec interface
En cliquant sur le bouton F1, F1 est remplacé par F2. Je veux transférer des données dans F1 à F2. Pour cela, je mis en œuvre l'interface en F1 et remplacer la méthode de A.
Mais lors de l'envoi des données de A à F2, ma référence (sFragment dans le code A) au F2 reste nulle, en raison de laquelle les données ne sont pas envoyées à F2. Je reçois référence à la F2 en utilisant TAG fourni en remplaçant F1 par F2.
Cela a-t-il quelque chose à voir avec le cycle de vie, comme lorsque j'essaie d'obtenir une référence à la F2 qu'elle n'a pas encore créée?
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;
}
}
}
A
@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;
}
}
vous devez utiliser 'Bundle' pour envoyer des données d'un fragment t o un autre fragment. – Shailesh