Cómo transferir algunos datos a otro Fragment
del mismo modo que se hizo con extras
para intents
?¿Cómo transferir algunos datos a otro Fragmento?
Respuesta
Utilice un Bundle
. He aquí un ejemplo: métodos
Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);
Bundle ha puestos a la gran cantidad de tipos de datos. Ver this
Luego, en su Fragment
, recuperar los datos (por ejemplo, en onCreate()
método) con:
Bundle bundle = this.getArguments();
if (bundle != null) {
int myInt = bundle.getInt(key, defaultValue);
}
Hola gracias por su respuesta, pero ¿tenemos que implementar algo como Serializable o Parcelable? –
estoy pasando un ArrayList de un objeto de una clase .. –
No, no es necesario para poner en práctica ninguna clase. Así – Gene
getArguments() está volviendo nula porque "Su no recibe nada"
Pruebe este código para manejar esta situación
if(getArguments()!=null)
{
int myInt = getArguments().getInt(key, defaultValue);
}
Hola gracias por su respuesta, pero ¿tenemos que implementar algo como Serializable o Parcelable? –
estoy pasando una lista de arrays de un objeto de una clase .. –
¿estás seguro? Porque tuve que implementar Serializable/Parcelable cuando estaba pasando datos complejos entre un fragmento y una actividad mediante el uso de intención ...... –
Solo para ampliar pre respuestas viciosas: podría ayudar a alguien. Si sus rendimientos null
, ponerlo a onCreate()
método y no al constructor de su fragmento:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int index = getArguments().getInt("index");
}
Para extender la respuesta anterior aún más, como Ankit estaba diciendo, por objetos complejos es necesario implementar Serializable. Por ejemplo, por el simple objeto:
public class MyClass implements Serializable {
private static final long serialVersionUID = -2163051469151804394L;
private int id;
private String created;
}
En que 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();
en su ToFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Bundle args = getArguments();
MyClass myClass = (MyClass) args
.getSerializable(TAG_MY_CLASS);
Código completo de datos que pasan utilizando el 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 la clase fragmento de encargo
Bundle mBundle = new Bundle();
mBundle = getArguments();
mBundle.getString(key); // key must be same which was given in first 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;
}
}
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.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@color/colorPrimary"
tools:context="com.example.sumedh.fragmentpractice1.MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/BtnNext"/>
</FrameLayout>
Xml for Next Fragment.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:background="@color/colorAccent"
android:layout_height="match_parent">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edtText"/>
</LinearLayout>
¿Explica tu respuesta? código sin ninguna explicación no ayudará mucho – Coder
he escrito código en un flujo por lo que podría ser entendido ..... Pasar datos de la actividad principal a FragClass1 con el uso del paquete. –
- 1. cómo transferir datos extra de un fragmento a otro a través de la actividad
- 2. Transferir datos de un servidor memcached a otro
- 3. ¿Cómo transferir una base de datos Y sus usuarios de un servidor SQL a otro?
- 4. Cómo llamar a la actividad desde otro fragmento.?
- 5. ¿Cómo transferir mi base de datos MySQL a otra computadora?
- 6. ¿Cómo transferir datos a un puerto en serie?
- 7. ¿Cómo transferir jQuery a CoffeeScript?
- 8. Reemplazar fragmento con otro fragmento en el interior ViewPager
- 9. Transferir archivo a través de ssh
- 10. ¿Cómo puedo transferir datos entre 2 bases de datos MySQL?
- 11. Cómo transferir la tabla mysql a colmena?
- 12. deslizando un fragmento sobre otro en Android
- 13. Transferir datos entre bases de datos con PostgreSQL
- 14. Problema: transferir datos grandes a la segunda actividad
- 15. Transferir datos de una Actividad a otra Actividad Usar Intentos
- 16. Android: Cómo transferir una aplicación desde la misma aplicación a otro teléfono Android
- 17. ¿Cómo transferir datos de una base de datos a otra con Hibernate?
- 18. ¿Qué formatos de datos puede transferir AJAX?
- 19. ¿Cómo acceder a algunos datos XML con Haskell (usando HaXml)?
- 20. Transferir archivo desde HDFS
- 21. diseño con el fragmento y FrameLayout reemplazado por otro fragmento y FrameLayout
- 22. ¿Cómo verifico si stdin tiene algunos datos?
- 23. ¿Cómo transferir "datos" entre dos dispositivos (Android, iPhone)?
- 24. de transferencia de datos MySQL a otro equipo
- 25. ¿Cómo puedo transferir bytes en fragmentos a los clientes?
- 26. Transferir datos de sesión entre hosts virtuales Apache
- 27. ¿Insertar datos de un servidor a otro?
- 28. La forma más fácil de transferir datos por Internet, Python
- 29. ¿Transfiere MongoDB a otro servidor?
- 30. Transferir gran cantidad de datos en el servicio WCF
Trato de responder a esta pregunta @ [aquí] (http: //stackoverflow.com/a/27626004/4249919). Espero que funcione – ozhanli