android.view.ContextThemeWrapper无法转换为android.app.Activity [英] android.view.ContextThemeWrapper cannot be cast to android.app.Activity
问题描述
我不是设计师,但是当我得到这个项目时,我无法专门打开某些屏幕,我认为它们是屏幕,我们仅重复使用已创建的某些布局. 无论如何有人可以帮助我吗? @Override public void onBindViewHolder(@NonNull final ProductsAdapter.ViewHolder持有人,最终int位置){ 字符串imageUrl = ProductsList.get(position).getImage();
I'm not a designer but when i got this project i can`t open specifically some screens, i think that they are screens and we only reuse some of the layouts have been created. Anyway can somebody help me? @Override public void onBindViewHolder(@NonNull final ProductsAdapter.ViewHolder holder, final int position) { String imageUrl = ProductsList.get(position).getImage();
holder.itemName.setText(ProductsList.get(position).getName());
Picasso.with(context).load(imageUrl).into(holder.itemImage);
holder.parentLayot.setOnClickListener(new View.OnClickListener() {
public String currentActivity;
@Override
public void onClick(View v) {
Activity activity = (Activity) v.getContext();
activity.runOnUiThread(bd);
String activityName = activity.getClass().getSimpleName();
// Toast.makeText(activity,ProductsList.get(position).getId(),Toast.LENGTH_SHORT).show();
if (activityName.equals("Product_View")){
// Toast.makeText(activity,"Click and pass",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(activity, Second_Product_View.class);
intent.putExtra("item_name", ProductsList.get(position).getName());
intent.putExtra("item_id", ProductsList.get(position).getId());
intent.putExtra("item_category_name", ProductsList.get(position).getName());
intent.putExtra("item_category_id", ProductsList.get(position).getId());
activity.startActivity(intent);
} else if(activityName.equals("Second_Product_View")){
Intent intent = new Intent(activity, Third_Product_View.class);
intent.putExtra("item_category_name", activity.getIntent().getStringExtra("item_category_name"));
intent.putExtra("item_category_id", activity.getIntent().getStringExtra("item_category_id"));
intent.putExtra("item_subcategory_name", ProductsList.get(position).getName());
intent.putExtra("item_subcategory_id", ProductsList.get(position).getId());
intent.putExtra("item_name", ProductsList.get(position).getName());
intent.putExtra("item_id", ProductsList.get(position).getId());
activity.startActivity(intent);
} else if(activityName.equals("Third_Product_View")){
Intent intent = new Intent(activity, Fourth_Product_View.class);
intent.putExtra("item_category_name", activity.getIntent().getStringExtra("item_category_name"));
intent.putExtra("item_category_id", activity.getIntent().getStringExtra("item_category_id"));
intent.putExtra("item_subcategory_name", activity.getIntent().getStringExtra("item_subcategory_name"));
intent.putExtra("item_subcategory_id", activity.getIntent().getStringExtra("item_subcategory_id"));
intent.putExtra("item_section_name", ProductsList.get(position).getName());
intent.putExtra("item_section_id", ProductsList.get(position).getId());
intent.putExtra("item_name", ProductsList.get(position).getName());
intent.putExtra("item_id", ProductsList.get(position).getId());
activity.startActivity(intent);
} else if(activityName.equals("Fourth_Product_View")){
holder.downloadManager = (DownloadManager)activity.getSystemService(Context.DOWNLOAD_SERVICE);
String file = activity.getString(R.string.base_url) + "files/example-" + ProductsList.get(position).getId() + ".pdf";
Uri uri = Uri.parse(file);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
Long reference = holder.downloadManager.enqueue(request);
} else if (activityName.equals("Formation_View")){
Intent intent = new Intent(activity, Second_Formation_View.class);
intent.putExtra("item_name", ProductsList.get(position).getName());
intent.putExtra("item_id", ProductsList.get(position).getId());
intent.putExtra("item_category_name", ProductsList.get(position).getName());
intent.putExtra("item_category_id", ProductsList.get(position).getId());
activity.startActivity(intent);
} else if(activityName.equals("Second_Formation_View")){
Intent intent = new Intent(activity, Third_Formation_View.class);
intent.putExtra("item_category_name", activity.getIntent().getStringExtra("item_category_name"));
intent.putExtra("item_category_id", activity.getIntent().getStringExtra("item_category_id"));
intent.putExtra("item_subcategory_name", ProductsList.get(position).getName());
intent.putExtra("item_subcategory_id", ProductsList.get(position).getId());
intent.putExtra("item_name", ProductsList.get(position).getName());
intent.putExtra("item_id", ProductsList.get(position).getId());
activity.startActivity(intent);
} else if(activityName.equals("Third_Formation_View")){
holder.downloadManager = (DownloadManager)activity.getSystemService(Context.DOWNLOAD_SERVICE);
String file = activity.getString(R.string.base_url) + "files/example-" + ProductsList.get(position).getId() + ".pdf";
Uri uri = Uri.parse(file);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
Long reference = holder.downloadManager.enqueue(request);
} else if (activityName.equals("Tools_View")){
Intent intent = new Intent(activity, Second_Tools_View.class);
intent.putExtra("item_name", ProductsList.get(position).getName());
intent.putExtra("item_id", ProductsList.get(position).getId());
intent.putExtra("item_category_name", ProductsList.get(position).getName());
intent.putExtra("item_category_id", ProductsList.get(position).getId());
activity.startActivity(intent);
} else if(activityName.equals("Second_Tools_View")){
holder.downloadManager = (DownloadManager)activity.getSystemService(Context.DOWNLOAD_SERVICE);
String file = activity.getString(R.string.base_url) + "files/example-" + ProductsList.get(position).getId() + ".pdf";
Uri uri = Uri.parse(file);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
Long reference = holder.downloadManager.enqueue(request);
}
}
});
}
日志显示此内容
java.lang.ClassCastException: android.view.ContextThemeWrapper cannot be cast to android.app.Activity
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at
推荐答案
此行可能是罪魁祸首:
Activity activity = (Activity) v.getContext();
传递给onClick()
方法的视图v
与您为其分配侦听器的视图相同,因此v
与holder.parentLayot
相同.我不知道holder.parentLayot
的确切来源,但是很有可能该视图(或其父视图之一)具有android:theme
属性(在XML中).
The view v
passed to the onClick()
method is the same view that you assigned the listener to, so v
is the same as holder.parentLayot
. I don't know exactly where holder.parentLayot
came from, but chances are very good that (in XML) this view (or one of its parents) has an android:theme
attribute.
当视图具有android:theme
属性时,它不会直接使用其活动的上下文.取而代之的是,Android框架将在ContextThemeWrapper
中包装"活动的上下文,以修改视图的主题.
When a view has the android:theme
attribute, it doesn't use its activity's context directly. Instead, the android framework will "wrap" the activity's context in a ContextThemeWrapper
in order to modify the view's theme.
要从此包装器访问活动,您必须对其进行解包".尝试这样的事情:
To access the activity from this wrapper, you'll have to "unwrap" it. Try something like this:
private static Activity unwrap(Context context) {
while (!(context instanceof Activity) && context instanceof ContextWrapper) {
context = ((ContextWrapper) context).getBaseContext();
}
return (Activity) context;
}
然后,您可以在onClick()
中使用此方法,而不是直接强制转换上下文:
Then, you can use this method in your onClick()
instead of casting the context directly:
Activity activity = unwrap(v.getContext());
这篇关于android.view.ContextThemeWrapper无法转换为android.app.Activity的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!