Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo guardar el estado del fragmento teniendo listview

Aquí hay una situación. Quiero navegar desde el fragmento A-> B-> C.

En el fragmento B hay listview. Al hacer clic en el elemento, abra la vista de detalle C Fragmento. Ofcourse utilicé el método del reemplazo y agregado addtoBackStack (nulo) mientras que el transactiong de B a C de modo que en la prensa de la parte posterior volvió a B.

  • Android: construye APKs separados para diferentes arquitecturas de procesador
  • Cómo centrar el icono y el texto en un botón android con el ancho establecido en "fill parent"
  • No se puede agregar nueva cuenta personalizada desde una aplicación diferente con el mismo autenticador
  • ¿Cómo funciona? RequestLocationUpdates () + LocationRequest / Listener
  • Vista web de android que muestra la página en blanco
  • ¿Cómo se desactiva la ventana de previsualización de la tecla SoftKeyboard?
  • Todo va bien. Pero cuando vuelvo a B de C, la vista se está actualizando y por lo tanto el servicio web se está llamando de nuevo. No quiero hacer esto. Quiero retener el estado Fragmento B con listview.

    Tengo un puesto de retener instancia, pero no ayudó mucho.

    Cualquier ayuda es muy apreciada.

    Gracias.

  • Android: convertir String a int
  • Xamarin Android Player - No se puede reproducir este vídeo
  • Android - ¿Crear una aplicación con Java puro y sin XML?
  • Error de código de análisis (prefijo de espacio de nombres inesperado) después de actualizar Android Support Library 23.2.0
  • ProgressDialog: cómo evitar la ventana filtrada
  • Diseño relativo ignorando setMargin ()
  • 4 Solutions collect form web for “Cómo guardar el estado del fragmento teniendo listview”

    Como se explica aquí , puede usar onSaveInstanceState () para guardar datos en el Bundle y recuperar esos datos en el método onRestoreInstanceState ().

    A menudo setRetainState (true) se menciona como forma de mantener el estado ui en fragmento, pero no funciona para usted porque está utilizando la backstack.

    Así que una buena manera para usted podría ser para guardar la posición de desplazamiento en onSaveInstanceState () y restaurar en onRestoreInstanceState () así:

     public class MyListFragment extends ListFragment { @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); int index = this.getListView().getFirstVisiblePosition(); View v = this.getListView().getChildAt(0); int top = (v == null) ? 0 : v.getTop(); outState.putInt("index", index); outState.putInt("top", top); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); [...] if (savedInstanceState != null) { // Restore last state for checked position. index = savedInstanceState.getInt("index", -1); top = savedInstanceState.getInt("top", 0); } if(index!=-1){ this.getListView().setSelectionFromTop(index, top); } } 

    Además, puede encontrar un ejemplo similar más detallado aquí .

    He resuelto este problema creando mi adaptador en onCreate () en vez de onCreateView ().

    Esto es porque (creo) el fragmento que se agrega a la backstack perdió su vista y luego tiene que volver a crear la vista. OnCreateView () se llama e incidentalmente volver a crear su adaptador.

    Usted puede ahorrar defina su ui en oncreate. Cuando en onCreateView, sólo agregue el diseño. Así que el estado de la visión puede ahorrar perfecto.

    Este es mi sv

    En crecer

      LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(ctx.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.pulltorefreshgridview, null); mPullRefreshGridView = (PullToRefreshGridView) view .findViewById(R.id.listcate_pullrefresh_gridview); 

    Texto fuerte en onCreateView

     if (rootView != null) ((LinearLayout)rootView).removeAllViews(); View v = inflater.inflate(R.layout.listcate_fragment, container, false); rootView = v; ((LinearLayout) v).addView(mPullRefreshGridView, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); 

    Creo que puedes guardar la posición de tu ListView justo antes de salir del fragmento B. Tal vez lo hagas en el fragmento B's onStop () . Y cuando regreses, puedes recuperar esa posición y restaurarla a ListView, haz eso por ejemplo en el fragmento B onStart () . Los datos de posición pueden guardarse en la actividad para que no se pierda ni siquiera el fragmento desprendido.

    Una cosa debe notarse que (si he sido atrapado por esto), si los datos de posición guardados son actualizados por el servicio de fondo, debe evitar restaurarlo a ListView antes de la etapa de ciclo de vida onStart () del fragmento B, porque en realidad , El marco salvará el estado de la vista justo antes de dejar el fragmento y restaurarlo cuando vuelva. Por lo tanto, si restaura su posición antes de que el marco lo haga, los datos de restauración del marco sustituirán los suyos.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.