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


Traiga el fragmento al frente (sin fragmentos de recreación)

Tengo tres fragmentos F1 F2 F3 F4 todos son accesibles desde la barra lateral.

Los cuatro pueden ser llamados en cualquier momento y en cualquier orden,

  • ¿Cómo puedo detectar qué diseño está seleccionado por Android en mi aplicación?
  • Android - La mejor manera de implementar LocationListener a través de múltiples actividades
  • Android - getIdentifier devuelve siempre 0 (biblioteca + aplicación)
  • FileNotFoundException para HttpURLConnection en Ice Cream Sandwich
  • Android JobScheduler onStartJob se llama varias veces
  • En Android, ¿cómo configuro los márgenes en dp mediante programación?
  • Ahora quiero que, F1 ya está hecho clic (creado), entonces nunca más crear F1, pero sólo traer de nuevo el fragmento F1 a la parte delantera utilizando el administrador de fragmentos. Lo mismo para todos los otros fragmentos

    Hasta ahora he intentado esto por cada fragmento en mi contenedor (ACTIVIDAD DE FRAGMENTO)

    if (fragmentManager.findFragmentByTag("apps")==null) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); Fragment newFragment = new CategoriesFragment(); transaction.replace(R.id.content_frame, newFragment, "apps"); transaction.addToBackStack("apps"); transaction.commit(); } else{ } 

    If parte me asegura NO fragmento es recreado (si ya está creado) de nuevo, pero ¿qué debo escribir en else parte para que el fragmento ya creado puede ser llevado al frente en la jerarquía de vista

    Por favor ayuda, estoy atascado en esto por 2 días.

  • Cómo alinear el botón de radio en el centro de la pantalla
  • Enlace profundo de Facebook en Android
  • Establecer la orientación horizontal en android en ambos lados
  • Cambiar el color del texto del elemento seleccionado en la ruleta
  • Los subtítulos de la barra de herramientas no aparecen
  • Android: Interceptar llamada AJAX desde WebView
  • 5 Solutions collect form web for “Traiga el fragmento al frente (sin fragmentos de recreación)”

    Pondría este código en la clase de actividad, que debe tener FrameLayout con id R.id.fragment_container .

     private Fragment1 F1; private Fragment2 F2; private Fragment3 F3; private Fragment4 F4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); F1 = new Fragment1(); getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, F1).commit(); F2 = new Fragment2(); getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, F2).commit(); F3 = new Fragment3(); getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, F3).commit(); F4 = new Fragment4(); getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, F4).commit(); //if needed show F1 getSupportFragmentManager().beginTransaction().show(F1).commit(); } 

    Y agregue esto para el tecleo del botón:

     public void onBtnClick(View view){ if(mShowF1){ getSupportFragmentManager().beginTransaction().show(F1).commit(); getSupportFragmentManager().beginTransaction().hide(F2).commit(); getSupportFragmentManager().beginTransaction().hide(F3).commit(); getSupportFragmentManager().beginTransaction().hide(F4).commit(); } //... } 

    En el botón haga clic en (s) puede mostrar, ese fragmento que desea y ocultar otros.

    NOTA (@ developer1011): Para uso después de la actividad save state call commitAllowingStateLoss () . Use con cuidado, porque el fragmento no se restaura con la restauración de la actividad.

    NOTA: MainActivity debería implementar OnFragmentInteractionListener para cada Fragmento.

     public class MainActivity extends FragmentActivity implements Fragment1.OnFragmentInteractionListener, Fragment2.OnFragmentInteractionListener, Fragment3.OnFragmentInteractionListener, Fragment4.OnFragmentInteractionListener {//.. @Override public void onFragmentInteraction(Uri uri) { // } } 

    Obtener el fragmento por etiqueta y reemplazarlo en el contenedor,

     else{ Fragment existingFragment = (CategoriesFragment)fragmentManager.findFragmentByTag("apps"); transaction.replace(R.id.content_frame,existingFragment, "apps"); transaction.addToBackStack("apps"); transaction.commit(); } 

    UPDATE: puede usar ocultar y mostrar fragmento para evitar la recreación. En lugar de usar "transaction.replace ()"

     fragmentTransaction.hide(<oldFragment>); fragmentTransaction.show(<newFragment>); 
    1. Usa un ArrayList<Fragment> simple ArrayList<Fragment> para tus Fragmentos, y agrégalos en orden, para que sepas que get (0) obtendrá F1, get (1) obtiene F2, etc.

    2. Cree los Fragmentos como singletons. En cada fragmento agregue un campo y un método estáticos:

        private static Fragment mMyInstance = null; public static Fragment newInstance() { if (mMyInstance == null) { mMyInstance = new F1(); } return mMyInstance; } 
    3. Cree los Fragmentos con el método estático y agréguelos a ArrayList.

    4. En cada fragmento, agregue setRetainInstance(true); Comando al método onCreate ().

    Ahora, cuando se agrega el fragmento con el FragmentManager, onCreate() sólo se llamará la primera vez, pero onCreateView() se llamará cada vez. Desea inflar la vista y conectar los widgets cada vez, sólo en caso de que su actividad se haya recreado debido a un cambio de configuración. Pero puede comprobar algo que agrega para ver si es la primera vez o no, y restablecer los widgets a su estado anterior si no. Por lo tanto, necesitará variables miembro en sus Fragmentos para realizar un seguimiento de su estado. Anula onStop () para guardar el estado y vuelve a aplicarlo en onCreateView () después de conectar los widgets.

    A continuación, cuando se presiona el botón de la barra lateral, se obtiene el fragmento que corresponde a ese botón, se elimina el fragmento anterior y se agrega el actual con FragmentManager (o simplemente se utiliza el comando replace () en lugar de remove () / add) .

    Si está utilizando el Fragmento de soporte, este método estático realiza el trabajo.

      /** * Takes a Fragment TAG and tries to find the fragment in the manager if it exists and bring it to front. * if not, will return false; * @param manager * @param tag */ public static boolean resurfaceFragment(FragmentManager manager, String tag ){ Fragment fragment = manager.findFragmentByTag(tag); FragmentTransaction transaction = manager.beginTransaction(); if (fragment!=null){ for (int i = 0; i < manager.getFragments().size(); i++) { Fragment f = manager.getFragments().get(i); transaction.hide(f); } transaction.show(fragment).commit(); return true; } return false; } 

    Si usted está tratando de añadir un Fragment sin tener que preocuparse de recrearlo, entonces creo que este método que he escrito para agregar Fragment le hará trabajo.

     public static void attachFragment ( int fragmentHolderLayoutId, Fragment fragment, Context context, String tag ) { FragmentManager manager = ( (AppCompatActivity) context ).getSupportFragmentManager (); manager.findFragmentByTag ( tag ); FragmentTransaction ft = manager.beginTransaction (); if (manager.findFragmentByTag ( tag ) == null) { // No fragment in backStack with same tag.. ft.add ( fragmentHolderLayoutId, fragment, tag ); ft.addToBackStack ( tag ); ft.commit (); } else { ft.show ( manager.findFragmentByTag ( tag ) ).commit (); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.