Comment transférer des données sur un autre fragment?

Comment transférer certaines données sur un autre Fragment ?

Utilisez un Bundle . Voici un exemple:

 Fragment fragment = new Fragment(); Bundle bundle = new Bundle(); bundle.putInt(key, value); fragment.setArguments(bundle); 

Bundle a mis des méthodes pour beaucoup de types de données. Voir ça

Ensuite, dans votre Fragment , récupérez les données (par exemple, dans la méthode onCreate() ) avec:

 Bundle bundle = this.getArguments(); if (bundle != null) { int myInt = bundle.getInt(key, defaultValue); } 

Pour étendre encore la réponse précédente, comme le disait Ankit, pour les objects complexes, vous devez implémenter Serializable. Par exemple, pour l’object simple:

 public class MyClass implements Serializable { private static final long serialVersionUID = -2163051469151804394L; private int id; private Ssortingng created; } 

En vous FromFragment:

 Bundle args = new Bundle(); args.putSerializable(TAG_MY_CLASS, myClass); Fragment toFragment = new ToFragment(); toFragment.setArguments(args); getFragmentManager() .beginTransaction() .replace(R.id.body, toFragment, TAG_TO_FRAGMENT) .addToBackStack(TAG_TO_FRAGMENT).commit(); 

dans votre ToFragment:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Bundle args = getArguments(); MyClass myClass = (MyClass) args .getSerializable(TAG_MY_CLASS); 

getArguments () renvoie null car “Il n’y a rien”

Essayez ce code pour gérer cette situation

 if(getArguments()!=null) { int myInt = getArguments().getInt(key, defaultValue); } 

Code complet de transmission de données en utilisant fragment to fragment

 Fragment fragment = new Fragment(); // replace your custom fragment class Bundle bundle = new Bundle(); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); bundle.putSsortingng("key","value"); // use as per your need fragment.setArguments(bundle); fragmentTransaction.addToBackStack(null); fragmentTransaction.replace(viewID,fragment); fragmentTransaction.commit(); 

Dans la classe de fragment personnalisée

 Bundle mBundle = new Bundle(); mBundle = getArguments(); mBundle.getSsortingng(key); // key must be same which was given in first fragment 

Juste pour prolonger les réponses précédentes – cela pourrait aider quelqu’un. Si votre getArguments() retourne null , mettez-le à la méthode onCreate() et non au constructeur de votre fragment:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int index = getArguments().getInt("index"); } 
  First Fragment Sending Ssortingng To Next Fragment public class MainActivity extends AppCompatActivity { private Button Add; private EditText edt; FragmentManager fragmentManager; FragClass1 fragClass1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Add= (Button) findViewById(R.id.BtnNext); edt= (EditText) findViewById(R.id.editText); Add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fragClass1=new FragClass1(); Bundle bundle=new Bundle(); fragmentManager=getSupportFragmentManager(); fragClass1.setArguments(bundle); bundle.putSsortingng("hello",edt.getText().toSsortingng()); FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.activity_main,fragClass1,""); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } }); } } Next Fragment to fetch the ssortingng. public class FragClass1 extends Fragment { EditText showFrag1; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=inflater.inflate(R.layout.lay_frag1,null); showFrag1= (EditText) view.findViewById(R.id.edtText); Bundle bundle=getArguments(); Ssortingng a=getArguments().getSsortingng("hello");//Use This or The Below Commented Code showFrag1.setText(a); //showFrag1.setText(Ssortingng.valueOf(bundle.getSsortingng("hello"))); return view; } } I used Frame Layout easy to use. Don't Forget to Add Background color or else fragment will overlap. This is for First Fragment.     Xml for Next Fragment.    

Votre fragment d’entrée

 public class SecondFragment extends Fragment { EditText etext; Button btn; Ssortingng etex; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.secondfragment, container, false); etext = (EditText) v.findViewById(R.id.editText4); btn = (Button) v.findViewById(R.id.button); btn.setOnClickListener(mClickListener); return v; } View.OnClickListener mClickListener = new View.OnClickListener() { @Override public void onClick(View v) { etex = etext.getText().toSsortingng(); FragmentTransaction transection = getFragmentManager().beginTransaction(); Viewfragment mfragment = new Viewfragment(); //using Bundle to send data Bundle bundle = new Bundle(); bundle.putSsortingng("textbox", etex); mfragment.setArguments(bundle); //data being send to SecondFragment transection.replace(R.id.frame, mfragment); transection.isAddToBackStackAllowed(); transection.addToBackStack(null); transection.commit(); } }; } 

votre fragment de vue

 public class Viewfragment extends Fragment { TextView txtv; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.viewfrag,container,false); txtv = (TextView) v.findViewById(R.id.textView4); Bundle bundle=getArguments(); txtv.setText(Ssortingng.valueOf(bundle.getSsortingng("textbox"))); return v; } }