Fragmento ya activo – Al intentar establecerArgumentos

Estoy usando el ejemplo dar en el siguiente enlace

Http://android-er.blogspot.in/2013/04/handle-onlistitemclick-of-listfragment.html

Aquí tengo dos clases una que extiende el fragmento de la lista y el otro fragmento que extiende. Ahora estoy pasando objeto a detailfragment de esta manera:

* De ListFragment *

@Override public void onListItemClick(ListView l, View v, int position, long id) { Detailfragment detailFragment = (Detailfragment)getFragmentManager().findFragmentById(detailFragmentID); Bundle bundle = new Bundle(); bundle.putSerializable(BUNDLE_KEY, obj);// passing this object detailFragment.setArguments(bundle); detailFragment.setUpLayout();// update the UI } 

Ahora en la clase Fragmento lo recibo, objetivo básico es actualizar la interfaz de usuario del fragmento basado en el elemento seleccionado en el fragmento de lista, esa es la razón por la que estoy enviando el objeto

 Bundle b = getArguments(); b.getSerializable(BUNDLE_KEY); 

Ahora en el artículo seleccionado dice "Fragmento ya activo".

Cuál es el problema aquí? ¿Qué estoy haciendo mal?

Otra solución es crear un constructor vacío para su fragmento.

 public Detailfragment() { super(); // Just to be an empty Bundle. You can use this later with getArguments().set... setArguments(new Bundle()); } 

Y en el método onListItemClick usas ese lote:

 @Override public void onListItemClick(ListView l, View v, int position, long id) { Detailfragment detailFragment = (Detailfragment)getFragmentManager().findFragmentById(detailFragmentID); // Update the keys. detailFragment.getArguments().putSerializable(BUNDLE_KEY, obj);// passing this object detailFragment.setUpLayout();// update the UI } 

Ahora puede llamar a getArguments () methond en su método setUpLayout ().

Desde el Android oficial de desarrollo Referencia:

Public void setArguments (Bundle args) Suministre los argumentos de construcción para este fragmento. Esto sólo puede ser llamado antes de que el fragmento se haya unido a su actividad; Es decir, debe llamar inmediatamente después de construir el fragmento. Los argumentos suministrados aquí serán retenidos a través de la destrucción y creación de fragmentos.

Su fragmento ya está unido a su actividad le sugiero que utilice su propio método, no necesita setArguments!

Cree sus propios setUIArguments (Bundle args) dentro de la clase fragment y actualice la UI del fragmento dentro de este método

Usted llamará a este método de esta manera:

 @Override public void onListItemClick(ListView l, View v, int position, long id) { Detailfragment detailFragment = (Detailfragment)getFragmentManager().findFragmentById(detailFragmentID); Bundle bundle = new Bundle(); bundle.putSerializable(BUNDLE_KEY, obj);// passing this object detailFragment.setUIArguments(bundle); /* your new method */ } 

En tu clase de fragmentos

 public void setUIArguments(Bundle args) { getActivity().runOnUiThread(new Runnable() { public void run() { /* do your UI stuffs */ } } } 

Puede comprobar si ya hay argumentos y, si es así, simplemente agregue / actualice.

 private static void initFrag(Fragment frag, Bundle args) { if (frag.getArguments() == null) { frag.setArguments(args); } else { //Consider explicitly clearing arguments here frag.getArguments().putAll(args); } } 

Opcionalmente, puede que desee eliminar argumentos existentes si no puede asumir con seguridad que los argumentos preexistentes siguen siendo válidos.

Esta variable global:

 private FragmentManager fragmentmanager; private FragmentTransaction fragmenttransaction; 

Estos códigos se insertan en el "List Fragment" onCreate () Actividad:

 fragmenttransaction = fragmentmanager.beginTransaction(); fragmenttransaction.replace(detailFragmentID, detailFragment, "test"); fragmenttransaction.addToBackStack(null); fragmenttransaction.commit(); 

Estos son Drawerlistitem click event:

 @Override public void onListItemClick(ListView l, View v, int position, long id) { Bundle bundle = new Bundle(); fragmenttransaction = fragmentmanager.beginTransaction(); if(fragmentmanager.findFragmentById("test") != null) { fragmenttransaction.remove(fragmentmanager.findFragmentByTag("test")); } Detailfragment detailFragment = (Detailfragment)getFragmentManager().findFragmentById(detailFragmentID); bundle.putSerializable(BUNDLE_KEY, obj);// passing this object detailFragment.setArguments(bundle); fragmenttransaction.replace(detailFragmentID, detailFragment, "test"); fragmenttransaction.addToBackStack(null); fragmenttransaction.commit(); } 

Ahora extiende el código del fragmento como es:

 Bundle b = getArguments(); b.getSerializable(BUNDLE_KEY); 

Método público del fragmento de diálogo

  public void setBundle(final Bundle bundle) { final Bundle arguments = getArguments(); arguments.clear(); arguments.putAll(bundle); } 

Mostrar o actualizar el fragmento de diálogo

  public void showMessageDialogue(final String tag, final Bundle bundle) { final Fragment fragment = mFragmentManager.findFragmentByTag(tag); if (fragment != null && fragment instanceof MessageDialogueFragment) { ((MessageDialogueFragment) fragment).setBundle(bundle); } else { final MessageDialogueFragment messageDialogueFragment = new MessageDialogueFragment(); messageDialogueFragment.setArguments(bundle); messageDialogueFragment.show(mFragmentManager, tag); } } 
  • Biblioteca de navegación para automóviles Android
  • ¿Por qué se utiliza FrameLayout para fragmentos?
  • Android fragmento addToBackStack (null): ¿cómo agregar el mismo fragmento a la pila sólo una vez?
  • Error de orientación de conmutación: Fragmento de error - ID de duplicado, etiqueta o identificador de origen 0x0
  • Cómo migrar de la actividad a fragmento
  • Obtener información de fragmentos visibles actuales en android dumpsys
  • Google google maps con marcador dentro del fragmento
  • El fragmento de niño está destruyendo automáticamente
  • Android - No se puede usar popup en Fragmento
  • Android - FragmentTabHost me da "No se conoce ninguna pestaña para la etiqueta null"
  • Fragmento dinámico de Android Google Maps en el soporte de RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.