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


Viewpager en el fragmento no se muestra (restaurado) cuando vuelve de otro fragmento

Estoy frente al problema de la siguiente manera: En la pantalla principal, tengo 3 botones: Config, Main, Configuración.

  • Cuando se hace clic en cada botón, se mostrará un fragmento correspondiente para inflar el diseño en FrameLayout.
  • Cuando el usuario está en Config o Fragmento de Configuración, puede volver al Fragmento principal utilizando el botón de presión o pulsar sobre el botón Principal. Cuando el usuario está en Fragmento Principal, si el usuario hace clic en Atrás, se mostrará una ventana emergente para confirmar la salida.

En el fragmento principal, pongo un viewpager. Dentro de este viewpager, puse 2 otros fragmentos, cada uno de ellos contiene una rejilla de imágenes (yo también utilicé un indicador del círculo para ver los cambios de la página en el fondo). Por simplicidad, Fragmento de configuración y Fragmento de configuración sólo muestran un Texto en el centro. Cuando el inicio de la aplicación, en mostró normalmente fragmento principal, cuando hago clic en el botón Configuración o Config, mostró normalmente fragmentos correspondientes. El problema es cuando haga clic en el botón Atrás (en Android), regresa al Fragmento Principal pero sin fragmentos dentro de viewpager. Mostraba una pantalla vacía.

  • Desinstala la aplicación de Android Wear desde un dispositivo real
  • Open-Source Ejemplos de aplicaciones Android bien diseñadas?
  • ¿Cómo puedo cambiar el idioma de mi aplicación
  • AndroidStudio - Dependencias de módulos en Gradle
  • La actividad de configuración no se abre en la tableta
  • Adb no se reconoce como comando interno o externo en Windows
  • El fragmento principal - fragmento 1 en viewpager se muestraFragmento principal - el fragmento 2 en viewpager se muestraFragmento de configuraciónFragmento de configuraciónVolver al fragmento principal del fragmento config / setting

    Tal vez estoy equivocado cuando el proceso de volver de config / setting fragmento de fragmento principal. Si el fragmento principal acaba de inflar un cierto diseño sin viewpager, el problema no sucederá. ¿Cómo restaurar el estado del viewpager cuando vuelve al fragmento principal del fragmento config / setting? Estoy adjuntando mi código para que pueda darme una respuesta más clara. Muchas gracias por cualquier respuesta.

    package com.example.testfragmentviewpager; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.widget.Button; import android.widget.FrameLayout; import com.example.viewpageindicator.CirclePageIndicator; import com.example.viewpageindicator.PageIndicator; public class MainActivity extends FragmentActivity { Fragment configFragment; Fragment settingFragment; Fragment mainItemsFragment; FrameLayout frmLayout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); if (savedInstanceState == null) { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); frmLayout = (FrameLayout) findViewById(R.id.frame_cotainer); mainItemsFragment = new MainItemsFragment(); ft.add(R.id.frame_cotainer, mainItemsFragment, "mainItems").commit(); } addListener(R.id.btnConfig); addListener(R.id.btnMain); addListener(R.id.btnSetting); } public void addListener(int buttonID) { final Button btn = (Button) findViewById(buttonID); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { showFragment(btn); } }); } public void showFragment(View v) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); switch (v.getId()) { case R.id.btnConfig: if (configFragment == null) { configFragment = new ConfigListFragment(); } else if (configFragment.isVisible()) return; if (getCurrentEntriesInBackStack() == 0) { ft.addToBackStack("mainItems"); } ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.replace(R.id.frame_cotainer, configFragment, "config"); break; case R.id.btnMain: if (mainItemsFragment == null) mainItemsFragment = new MainItemsFragment(); if (getCurrentEntriesInBackStack() == 0) return; else { if (configFragment != null && configFragment.isVisible()) { ft.detach(configFragment); configFragment = null; } if (settingFragment != null && settingFragment.isVisible()) { ft.detach(settingFragment); settingFragment = null; } ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); removeFromContainer(ft); callPopBackStack(); return; } case R.id.btnSetting: if (settingFragment == null) settingFragment = new SettingFragment(); else if (settingFragment.isVisible()) return; if (getCurrentEntriesInBackStack() == 0) { ft.addToBackStack("mainItems"); } ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.replace(R.id.frame_cotainer, settingFragment, "setting"); break; default: break; } ft.commit(); } private int getCurrentEntriesInBackStack() { FragmentManager fm = getSupportFragmentManager(); return fm.getBackStackEntryCount(); } private boolean callPopBackStack() { FragmentManager fm = getSupportFragmentManager(); boolean result = fm.popBackStackImmediate(); return result; } private void removeFromContainer(FragmentTransaction ft) { if (configFragment != null && configFragment.isVisible()) { ft.detach(configFragment); configFragment = null; } if (settingFragment != null && settingFragment.isVisible()) { ft.detach(settingFragment); settingFragment = null; } ft.commit(); } public static class ConfigListFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.layout_config, container, false); return v; } } public static class SettingFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.layout_setting, container, false); return v; } } public static class MainItemsFragment extends Fragment { private MyPagerAdapter adapter; private ViewPager viewpager; private PageIndicator mIndicator; View rootView; private class setAdapterTask extends AsyncTask<Void, Void, Void> { protected Void doInBackground(Void... params) { return null; } @Override protected void onPostExecute(Void result) { viewpager.setAdapter(adapter); mIndicator = (CirclePageIndicator) rootView.findViewById(R.id.indicator); mIndicator.setViewPager(viewpager); viewpager.setCurrentItem(0); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.mainscreen_layout, container, false); adapter = new MyPagerAdapter(getFragmentManager()); viewpager = (ViewPager) rootView.findViewById(R.id.myviewpager); new setAdapterTask().execute(); return rootView; } } public static class MyPagerAdapter extends FragmentPagerAdapter { public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int index) { if (index == 0) { return new MainFragment1(); } else { return new MainFragment2(); } } @Override public int getCount() { return 2; } } @Override public void onBackPressed() { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); removeFromContainer(ft); if (fm.popBackStackImmediate()) { return; } else { AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this); dlg.setTitle("Confirm Exit"); dlg.setMessage("Do you want to exit?").setCancelable(false).setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { MainActivity.this.finish(); } }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); AlertDialog alertDlg = dlg.create(); alertDlg.show(); } } } 

  • Crosswalk Cordova - js alerta muestra caracteres de bloque en la interfaz china android
  • ¿Cómo puedo configurar Vim para el desarrollo de Android?
  • Cómo utilizar interceptor para agregar encabezados en Retrofit 2.0
  • Cómo dibujar liso / camino redondeado?
  • ¿Cómo activar el clic o el evento de envío en el uso compartido de datos en otras aplicaciones en Android?
  • Diseño personalizado EditText
  • One Solution collect form web for “Viewpager en el fragmento no se muestra (restaurado) cuando vuelve de otro fragmento”

    Parece que estás usando uno de los hacks antiguos para incrustar fragmentos. Sugiero que primero actualice a la última biblioteca de soporte de Android, es decir. Versión 11. A continuación, eche un vistazo a cómo utilizar el Child FragmentManager http://developer.android.com/reference/android/support/v4/app/Fragment.html#getChildFragmentManager ()

    Tengo un ejemplo en github sobre cómo anidar fragmentos con un viewpager.
    https://github.com/marsucsb/nested-fragments

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