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.

  • No se puede abrir el puerto del depurador: java.net.ConnectException "Conexión rechazada"
  • No hay sombra por defecto en la barra de herramientas?
  • OnContextItemSelected no se llama en un DialogFragment
  • Compartir texto vía Intent en Facebook sin utilizar Facebook sdk
  • Cómo deshacer una llamada ParseUser.setPassword ()?
  • La vista de búsqueda no funciona desde la aplicación compat
  • 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.

  • Alerta de proximidad para ubicaciones guardadas en el servidor
  • Android studio - No se pudo encontrar el destino android-18
  • Animación paralela en Imageview
  • ¿Hay una manera de tener un campo de entrada numérico enmascarado?
  • LocalBroadcastManager vs Context.registerReceiver (), Context.sendBroadcast (Intent) y Context.unregisterReceiver () son iguales?
  • Actualización de Android SDK Tools R22
  • 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.