Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

contextthemewrapper cannot be cast to activity

in my small app i have a PageAdapter->Fragment->ListView->ImageView. On onImageClick i want display my image in another Fragment (Fragment3), but when i load an image in my Fragment3 get an Exception

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

and code which creates an Exception. When i create a fragment and add the ListView all passed ok, but when i create another fragment (child) and want to load Photo it fails.

code, how i create a child fragment, without 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");                              }         }) 

here is 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) {         }     } } 

and Exception

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) 
like image 348
zond Avatar asked Feb 09 '14 08:02

zond


1 Answers

Similar case I have. May be related question> Accessing activity from custom button

I solve my case with this snippet.

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; } 
like image 129
kikea Avatar answered Oct 04 '22 19:10

kikea