Contextthemewrapper no se puede transmitir a la actividad

En mi pequeña aplicación tengo un PageAdapter-> Fragment-> ListView-> ImageView. En onImageClick quiero mostrar mi imagen en otro fragmento (Fragmento3), pero cuando carga una imagen en mi Fragmento3 obtener una excepción

public class Fragment3 extends DialogFragment { ImageLoader imageLoader; ... @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = (ViewGroup) inflater.inflate(R.layout.fragment3_layout, container, false); imageView = (ImageView) view.findViewById(R.id.imageViewFrag3); detail = (TextView) view.findViewById(R.id.textViewFrag3); imageUrl = getArguments().getString("URL"); imageView.setTag(imageUrl); activity=this; imageLoader = new ImageLoader(activity.getActivity().getApplicationContext()); imageLoader.DisplayImage(imageUrl, (Activity) activity.getActivity(), imageView); return view; } ... } 

Y el código que crea una excepción. Cuando creo un fragmento y agrego el ListView todo aprobado bien, pero cuando creo otro fragmento (niño) y quiero cargar la foto falla.

Código, cómo crear un fragmento secundario, sin PageAdapter

 holder.imgViewImage = (ImageView) vi.findViewById(R.id.imageView01); holder.imgViewImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { android.support.v4.app.FragmentTransaction ft = activity.getFragmentManager().beginTransaction(); Fragment3 newFragment = Fragment3.newInstance(); Bundle bundle=new Bundle(); bundle.putString("URL", holder.imgViewImage.getTag().toString()); newFragment.setArguments(bundle); newFragment.show( ft, "dialog"); Log.i("!!!", "Click on image"); } }) 

Aquí está Photo Loader Thread,

 class PhotosLoader extends Thread { public void run() { try { while(true) { if(photosQueue.photosToLoad.size()==0) synchronized(photosQueue.photosToLoad){ photosQueue.photosToLoad.wait(); } if(photosQueue.photosToLoad.size()!=0) { PhotoToLoad photoToLoad; synchronized(photosQueue.photosToLoad){ photoToLoad=photosQueue.photosToLoad.pop(); } Bitmap bmp=getBitmap(photoToLoad.url); cache.put(photoToLoad.url, bmp); if(((String)photoToLoad.imageView.getTag()).equals(photoToLoad.url)){ BitmapDisplayer bd=new BitmapDisplayer(bmp, photoToLoad.imageView); //Exception contextthemewrapper cannot be cast to activity !!! Activity a= (Activity)(photoToLoad.imageView.getContext()); a.runOnUiThread(bd); } } if(Thread.interrupted()) break; } } catch (InterruptedException e) { } } } 

Y Excepción

 02-09 08:22:57.510: E/AndroidRuntime(1449): FATAL EXCEPTION: Thread-114 02-09 08:22:57.510: E/AndroidRuntime(1449): java.lang.ClassCastException: android.view.ContextThemeWrapper cannot be cast to android.app.Activity 02-09 08:22:57.510: E/AndroidRuntime(1449): at com.example.ids.ImageLoader$PhotosLoader.run(ImageLoader.java:171) 

 Activity a= (Activity)(photoToLoad.imageView.getContext()); 

No puede asumir que un Context pueda convertir en una Activity . De ahí la excepción: estás intentando emitir un Context que sea de hecho un ContextThemeWrapper a una Activity .

Puedes reemplazar

 Activity a= (Activity)(photoToLoad.imageView.getContext()); a.runOnUiThread(bd); 

Con, por ejemplo

 photoToLoad.imageView.post(bd); 

Para publicar una cola de mensajes Runnable to UI thread, similar a Activity runOnUiThread() .

Caso similar que tengo. Puede ser una pregunta relacionada> Acceder a la actividad desde el botón personalizado

Resuelvo mi caso con este fragmento.

 private static Activity scanForActivity(Context cont) { if (cont == null) return null; else if (cont instanceof Activity) return (Activity)cont; else if (cont instanceof ContextWrapper) return scanForActivity(((ContextWrapper)cont).getBaseContext()); return null; } 

Por lo que sé, si una vista que se muestra en un cuadro de diálogo, su contexto (acceso de view.getContext ()) es en realidad una instancia ThemeContextWrapper, que probablemente no es una actividad. Para obtener la actividad desde el cuadro de diálogo, puede utilizar getOwnerActivity (), que devuelve la actividad a la que pertenece el cuadro de diálogo.

  • La fila de RecyclerView está barajando y cambiando Imágenes: android
  • Ciclo de vida del fragmento con respecto a su actividad
  • Fragmentos en ViewPager se recrean
  • ¿Cómo pasar el contexto de MenuItem onOptionsItemSelected a ASyncTask?
  • no alcanzable después de usar .getActivity () en un fragmento
  • Fragmento no se muestra después de inflar
  • Vista en el paginador de vistas superposición entre vistas anterior y siguiente
  • Cómo encontrar listview en 'fragmento'
  • Tutorial de Android Fragment Basics
  • Adaptación de Model View Presenter patter a Android con Fragment Tabs
  • El video no se detiene en el fragmento ViewPager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.