Je suis un débutant à Fragments. Je veux passer une valeur de chaîne d'un fragment à un autre. comment faire ça? J'ai appelé mes fragments de la manière suivante. S'il vous plaît, guidez-moi pas à pas.
String cid = id.getText().toString();
Fragment fr = new FriendFragment();
Android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fr);
ft.commit();
Vous pouvez faire quelque chose comme ci-dessous,
String cid=id.getText().toString();
Fragment fr=new friendfragment();
FragmentManager fm=getFragmentManager();
Android.app.FragmentTransaction ft=fm.beginTransaction();
Bundle args = new Bundle();
args.putString("CID", cid);
fr.setArguments(args);
ft.replace(R.id.content_frame, fr);
ft.commit();
Pour recevoir les données, procédez comme suit:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String strtext = getArguments().getString("CID");
return inflater.inflate(R.layout.fragment, container, false);
}
Si vous souhaitez envoyer des données d'un fragment à une activité, vous pouvez utiliser une interface.
Mais lorsque vous voulez envoyer des données d'un fragment à un autre, cela devient compliqué. Vous voudriez envoyer des données à activity puis à l'autre fragment.
J'utilise EventBus pour résoudre ce problème. Comment ça marche.
C'est tout. Pas besoin d'écrire vos propres interfaces.
Vous pouvez également utiliser eventbus pour les communications du service d'arrière-plan ou des threads vers l'activité.
Commander le HowTo EventBus et Repository aussi.
tu peux essayer ça
Premier fragment
//adding data to the bundle class
Bundle b = new Bundle();
b.putString("user_name","simon");
b.putString("user_address","nepal");
//fragment operation
FragmentTransaction transaction = getFragmentManager().beginTransaction();
Fragment fragment=new friendfragment();
fragment.setArguments(b);
transaction.replace(R.id.container, fragment);
transaction.addToBackStack(null);
transaction.commit();
//Second Fragment(Receiving Fragment)
//write following code into onCreateView() method
Bundle b = getArguments();
String name = b.getString("user_name");
String address = b.getString("user_address");
La communication fragment à fragment doit s'effectuer via l'activité parent.
FragmentToSendData
interface <interfaceName>{
void <abstract method>(String str);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try{
<instance of the interface> = (<interface>)getActivity();
}catch (ClassCastException e) {
throw new ClassCastException(getActivity().toString()
+ " must implement <interface>");
}
}
ActivityWithBothFragments (cela peut être via ViewPager, ou utilisez l'identifiant de votre fragment, utilisez simplement findFragmentById ())
@Override <abstract method from frag1>(String str){
FragmentToReceiveData fragment2 = (FragmentToReceiveData)getSupportFragmentManager().findFragmentByTag(ViewPagerAdapter.getFragmentTag(1));
fragment2.getStringFromFrag1(String str);
}
FragmentToReceiveData
public void getStringFromFrag1(String str){
<textview>.setText("str");
}
try this :
- send data :
Bundle arg = new Bundle();
arg.putInt("ID", "12"); //arg.putInt("KEY", "VALUE")
arg.putString("NAME","Jaydeep");//arg.putString("KEY","VALUE")
YourFragment fragment = new YourFragment();
fragment.setArguments(arg);
fragmentManager.beginTransaction().add("PUT YOUR FRAM ID", fragment, fragment.getClass().getName())
.addToBackStack(null)
.commit();
- receive data :
Bundle bundle = getIntent().getExtras();
bundle.getInt("ID");
bundle.getString("NAME");
Log.e("Receive data : " ,"\nID - "+bundle.getInt("ID")+"\nNAME - "+bundle.getString("NAME"));