web-dev-qa-db-fra.com

Comment passer d'une valeur d'un fragment à un autre dans Android?

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(); 
8
user3256145

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);
}
28
Spring Breaker

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.

  1. Créer un événement-E.
  2. À partir de Fragment-A, inscrivez-vous pour des événements.
  3. À partir de fragment-B, publiez l'événement-E avec les données que vous souhaitez transmettre.
  4. Vous obtiendrez les données dans la méthode onEvent () que vous avez écrite dans Fragment-A.

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.

6
Midhun Vijayakumar

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");
1
Dinesh Sarma

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");

}
0
siriD
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"));
0
Jaydeep Dobariya