with viewpager pageradapter fragments example and android android-fragments android-viewpager fragmentpageradapter android-nested-fragment

android - fragments - ViewPager+FragmentPagerAdapter dentro de un DialogFragment obtiene "IllegalArgumentException: No se encontrĂ³ vista..."



fragments viewpager example (1)

Estoy intentando mostrar un FragmentDialog (creado y mostrado como un diálogo NO agregado como contenido en una jerarquía de vistas) donde hay un ViewPager cuyo contenido está dado por un FragmentPagerAdapter (proporciona Fragmentos que consisten en una imagen).

El código funciona perfectamente al mostrar ViewPager + FragmentPagerAdapter desde una FragmentActivity, pero obtiene la siguiente excepción cuando lo hace desde un FragmentDialog:

"IllegalArgumentException: no se ha encontrado la vista para id 0x7f040077 para el fragmento SimpleFragment ..."

Aquí está mi código:

Un 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; } }

Este es el muy simple MyFragmentPagerAdapter, puse solo el método getItem () y las comprobaciones 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 ints) tiene longitud cero, entonces el adaptador no intenta crear ningún Fragmento para que los cuadros de diálogo aparezcan correctamente pero vacíos (como se esperaba). La excepción se produce en SimpleFragment.onCreateView () en el momento de inflar. La ID a la que se hace referencia en la excepción (como no encontrada) corresponde a la id de ViewPager, con está definida correctamente en R.layout.simple_fragment.

También intenté construir el Diálogo con AlertDialog.builder y también directamente con el contructor Dialog (), pero obtuve el mismo comportamiento.