¿Cómo transferir algunos datos a otro Fragmento?

¿Cómo transferir algunos datos a otro Fragment así como se hizo con extras para intents ?

Usa un Bundle . Aquí hay un ejemplo:

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

Bundle ha puesto métodos para muchos tipos de datos. Mira esto

Luego, en su Fragment , recupere los datos (por ejemplo, en el método onCreate() ) con:

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

Para extender la respuesta anterior aún más, como decía Ankit, para objetos complejos necesitas implementar Serializable. Por ejemplo, para el objeto simple:

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

En ti desde fragmento:

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

en su ToFragment:

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

getArguments () devuelve nulo porque “no obtiene nada”

Pruebe este código para manejar esta situación

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

Código completo de pasar datos usando fragmento a fragmento

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

En clase de fragmento personalizado

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

Solo para extender las respuestas anteriores, podría ayudar a alguien. Si su getArguments() devuelve null , onCreate() método onCreate() y no en el constructor de su fragmento:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int index = getArguments().getInt("index"); } 
  First Fragment Sending String 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.putString("hello",edt.getText().toString()); FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.activity_main,fragClass1,""); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } }); } } Next Fragment to fetch the string. 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(); String a=getArguments().getString("hello");//Use This or The Below Commented Code showFrag1.setText(a); //showFrag1.setText(String.valueOf(bundle.getString("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.    

Su fragmento de entrada

 public class SecondFragment extends Fragment { EditText etext; Button btn; String 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().toString(); FragmentTransaction transection = getFragmentManager().beginTransaction(); Viewfragment mfragment = new Viewfragment(); //using Bundle to send data Bundle bundle = new Bundle(); bundle.putString("textbox", etex); mfragment.setArguments(bundle); //data being send to SecondFragment transection.replace(R.id.frame, mfragment); transection.isAddToBackStackAllowed(); transection.addToBackStack(null); transection.commit(); } }; } 

su fragmento de vista

 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(String.valueOf(bundle.getString("textbox"))); return v; } }