ViewPager + FragmentPagerAdapter dentro de un DialogFragment obtiene "IllegalArgumentException: No se encontró ninguna vista …"
Estoy tratando de mostrar un FragmentDialog (creado y mostrado como un diálogo NO agregado como contenido en una jerarquía de vista) donde hay un ViewPager cuyo contenido es dado por un FragmentPagerAdapter (proporciona Fragmentos que consiste en una imagen).
El código funciona perfecto al mostrar ViewPager + FragmentPagerAdapter de una FragmentActivity, pero obtiene la siguiente excepción cuando lo hace desde un FragmentDialog:
- ViewPager dentro de Fragmento no muestra a pesar de usar getChildFragmentManager () al construir FragmentPagerAdapter
- ViewPager en TabFragment no se carga por segunda vez
- Dónde llamar a getChildFragmentManager ()?
- Uso de fragmento anidado y objeto animador al lado
- No se encontró ninguna vista para id - DialogFragment + Fragment
"IllegalArgumentException: No se encontró ninguna vista para id 0x7f040077 para el fragmento SimpleFragment …"
Aquí está mi código:
A SherlockFragmentActivity con un botón para crear y mostrar el diálogo.
public class BorrameActivity extends SherlockFragmentActivity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.one_act); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { showTheDialog(); }}); } private void showTheDialog(){ AchGalleryDialog newFragment = AchGalleryDialog.newInstance(achs); newFragment.show(getSupportFragmentManager(), "dialog"); }
El FragmentDialog:
public class AchGalleryDialog extends DialogFragment{ public AchGalleryDialog(){ } public static AchGalleryDialog newInstance(){ AchGalleryDialog f = new AchGalleryDialog(); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_user_result, container); getDialog().setTitle("Hola tronco"); //content to show in the fragments int[] images = new int[]{R.drawable.d1, R.drawable.d2, R.drawable.d3}; ViewPager pager = (ViewPager) view.findViewById(R.id.pager); MyFragmentAdapter adapter = new MyFragmentAdapter(getFragmentManager(),images); pager.setAdapter(adapter); return view; } }
Éste es el MyFragmentPagerAdapter muy simple, puse solamente el método de getItem (), y las comprobaciones de nullPointer:
@Override public Fragment getItem(int position) { return MySimpleFragment.newInstance(images[position]); }
Y finalmente SimpleFragment:
public class SimpleFragment extends Fragment{ int id; public static SimpleAchFragment newInstance(int imgId){ SimpleFragment f = new SimpleFragment(); Bundle args = new Bundle(); args.putLong(ID_BUNDLE, imgId); f.setArguments(args); return f; } public SimpleAchFragment(){ } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.id = getArguments() != null ? getArguments().getInt(ID_BUNDLE) : 0; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View v = inflater.inflate(R.layout.simple_fragment, container, false); FragmentActivity mAct = getActivity(); ImageView img = (ImageView) v.findViewById(R.id.image); img.setImageDrawable(mAct.getResources().getDrawable(id)); return v; } }
Más información, si el contenido pasado al adaptador (una matriz int con 3 entradas) tiene longitud cero, entonces el adaptador no intenta crear ningún fragmento para que los diálogos aparezcan correctamente pero vacíos (como se esperaba). La Excepción se lanza a SimpleFragment.onCreateView () en el momento de inflar. El id que se hace referencia en la excepción (como no se encuentra) corresponde al ID de ViewPager, con está correctamente definido en R.layout.simple_fragment.
Tengo intentar también construir el diálogo con un AlertDialog.builder y también directamente con el constructor de Dialog (), pero consigo el mismo comportamiento.
- Cómo establecer ViewPager dentro de un fragmento
- Tengo un error extraño al usar un ViewPager dentro de un Fragmento
- ViewPager dentro de la cuestión del fragmento
- FragmentPagerAdapter dentro de Fragment
- Fragmento en ViewPager utilizando FragmentPagerAdapter está en blanco la segunda vez que se ve
- ¿Ciclo de vida de un ViewPager y BackStack reemplazados?
- Acceso a getString () en un fragmento que implementa un viewpager
Prueba esto:
En la clase AchGalleryDialog
MyFragmentAdapter adapter = new MyFragmentAdapter(getChildFragmentManager(),images);
en lugar de
MyFragmentAdapter adapter = new MyFragmentAdapter(getFragmentManager(),images);
Debido a esto:
http://developer.android.com/about/versions/android-4.2.html#NestedFragments
Espero que esto ayude!