android.view.ContextThemeWrapper 不能转换为

我不是设计师,但是当我得到这个项目时,我无法打开一些屏幕,我认为它们是屏幕,我们只重用了一些已经创建的布局。无论如何有人可以帮助我吗?@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);

            } 


阿晨1998
浏览 283回答 3
3回答

不负相思意

这一行可能是罪魁祸首:Activity activity = (Activity) v.getContext();的观点v传递给onClick()方法是相同的观点,即你分配听者,所以v是一样的holder.parentLayot。我不知道确切holder.parentLayot来自哪里,但很有可能(在 XML 中)此视图(或其父视图之一)具有android:theme属性。当视图具有该android:theme属性时,它不会直接使用其活动的上下文。相反,android 框架会将 Activity 的上下文“包装”在 aContextThemeWrapper中以修改视图的主题。要从此包装器访问活动,您必须“解开”它。尝试这样的事情:private static Activity unwrap(Context context) {    while (!(context instanceof Activity) && context instanceof ContextWrapper) {        context = ((ContextWrapper) context).getBaseContext();    }    return (Activity) context;}然后,您可以在您的onClick()而不是直接转换上下文中使用此方法:Activity activity = unwrap(v.getContext());

慕田峪7331174

Kotlin 中的递归解决方案:fun Context.getActivity(): Activity? {    return when (this) {        is Activity -> this        is ContextWrapper -> this.baseContext.getActivity()        else -> null    }}检查使用情况View.getContext()。

慕慕森

简单地使用上下文就可以了FragmentManager fragmentManager = ((AppCompatActivity) context).getSupportFragmentManager();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java