MyAdapter 无法在 android 中投射到 com.google.android.gms.ads.NativeExpressAdView

Pan*_*lan 5 java android adapter admob native-ads

我一直在使用RecyclerView和 Google Volley 来解析 JSON。然后我添加了谷歌原生广告!

我在此链接上关注教程

所以我确实像谷歌开发者指南一样改变了 RecyclerViewAdapter !

它说列表必须是对象列表(列表)所以我在适配器中更改了这个和其他一些东西!

然后 Android Studio 没有显示错误,我可以启动应用程序。但是当我要使用提到的 RecyclerView 打开 Fragment 时,它崩溃了。

它说:

java.lang.ClassCastException:com.graciaapps.nameoncards.instance.greetoptions.SubOptionOneInstance 无法转换为 com.google.android.gms.ads.NativeExpressAdView

这是 onBindViewHolder 的以下行

NativeExpressAdView adView =(NativeExpressAdView)greetingInstanceList.get(position);
Run Code Online (Sandbox Code Playgroud)

第一个片段.java

NativeExpressAdView adView =(NativeExpressAdView)greetingInstanceList.get(position);
Run Code Online (Sandbox Code Playgroud)

子选项一个适配器.java

package com.cards.adapter.greetoptions;

public class SubOptionOneAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<Object> greetingInstanceList;
    Activity activity;
    private String TAG = getClass().getName();
    private static final int MENU_ITEM_VIEW_TYPE = 0;
    private static final int AD_VIEW = 1;

    public SubOptionOneAdapter() {

    }

    public SubOptionOneAdapter(Activity activity, List<Object> greetingInstanceList) {
        this.greetingInstanceList = greetingInstanceList;
        this.activity = activity;
    }

    public class MenuItemViewHolder extends RecyclerView.ViewHolder{
        ImageView imageView;
        TextView tvCount;
        ProgressBar progressBar;

        public MenuItemViewHolder(View itemView) {
            super(itemView);

            imageView = (ImageView) itemView.findViewById(R.id.ivLatestCardImage);
            tvCount = (TextView) itemView.findViewById(R.id.tvLatestCardTitle);
            progressBar = (ProgressBar) itemView.findViewById(R.id.pbBeforeImage);
            progressBar.setVisibility(View.VISIBLE);
        }
    }

    public class NativeExpressAdViewHolder extends RecyclerView.ViewHolder{

        public NativeExpressAdViewHolder(View itemView) {
            super(itemView);
        }
    }

    @Override
    public int getItemCount() {
        return greetingInstanceList.size();
    }

    @Override
    public int getItemViewType(int position) {
        return (position % FirstFragment.ITEMS_PER_AD == 0) ? AD_VIEW : MENU_ITEM_VIEW_TYPE;
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        switch (viewType)
        {
            case MENU_ITEM_VIEW_TYPE:
               View  view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.latest_list_row,viewGroup,false);
                return new MenuItemViewHolder(view);
            case AD_VIEW:
                // fall through
            default:
                View nativeExpressLayoutView = LayoutInflater.from(
                        viewGroup.getContext()).inflate(R.layout.native_express_ad_container,
                        viewGroup, false);
                return new NativeExpressAdViewHolder(nativeExpressLayoutView);
        }
    }


    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
        int viewType = getItemViewType(position);

        switch (viewType) {
            case MENU_ITEM_VIEW_TYPE:
                final MenuItemViewHolder menuItemViewHolder = (MenuItemViewHolder)holder;
                final SubOptionOneInstance subOptionOneInstance = (SubOptionOneInstance) greetingInstanceList.get(position);
                EndPoints.CUSTOM_ID = "" + subOptionOneInstance.getId();

                Picasso.with(activity)
                        .load(subOptionOneInstance.getSample_image_url())
                        .error(R.drawable.ic_cancel_red)
                        .networkPolicy(NetworkPolicy.OFFLINE)
                        .into(menuItemViewHolder.imageView, new Callback() {
                            @Override
                            public void onSuccess() {
                                if (menuItemViewHolder.progressBar.getVisibility() == View.VISIBLE) {
                                    menuItemViewHolder.progressBar.setVisibility(View.GONE);
                                }
                            }

                            @Override
                            public void onError() {
                                if (menuItemViewHolder.progressBar.getVisibility() == View.VISIBLE) {
                                    menuItemViewHolder.progressBar.setVisibility(View.GONE);
                                }
                                Picasso.with(activity)
                                        .load(subOptionOneInstance.getSample_image_url())
                                        .error(R.drawable.ic_cancel_red)
                                        .into(menuItemViewHolder.imageView, new Callback() {
                                            @Override
                                            public void onSuccess() {

                                            }

                                            @Override
                                            public void onError() {
                                                Log.d(TAG, "PICASSO COULD NOT FETCH IMAGE");
                                            }
                                        });
                            }
                        });

                menuItemViewHolder.tvCount.setText(Integer.toString(subOptionOneInstance.getId()));
                menuItemViewHolder.imageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        SubOptionOneInstance instance = (SubOptionOneInstance) greetingInstanceList.get(position);
                        Intent intent = new Intent(activity, CardMaker.class);
                        activity.startActivity(intent);