如何在recyclerview中限制原生广告的数量

问题描述 投票:1回答:1

如何在recyclerview中限制原生广告的数量我只希望在recyclerview的前100行中每5行投放5个原生广告(每20行)。我的recyclerview有10000行。每20行广告输出就会使用户烦恼。因此,我想将广告数量限制为5。我做了很多更改,但没有。预先感谢您的帮助

我的活动中与广告有关的部分

public static final int ITEMS_PER_AD = 20;
private static final int NATIVE_EXPRESS_AD_HEIGHT = 100;

private void addNativeExpressAds() {

        // Loop through the items array and place a new Native Express ad in every ith position in
        // the items List.
        for (int i = 0; i <= mRecyclerViewItems.size(); i += ITEMS_PER_AD) {
            final NativeExpressAdView adView = new NativeExpressAdView(getActivity());
            mRecyclerViewItems.add(i, adView);
        }
    }
    private void setUpAndLoadNativeExpressAds() {
        mRecyclerView.post(new Runnable() {
            @Override
            public void run() {
                try {
                    for (int i = 0; i <= mRecyclerViewItems.size(); i += ITEMS_PER_AD) {
                        final NativeExpressAdView adView = (NativeExpressAdView) mRecyclerViewItems.get(i);
                        AdSize adSize = new AdSize(AdSize.FULL_WIDTH, NATIVE_EXPRESS_AD_HEIGHT);
                        adView.setAdSize(adSize);
                        adView.setAdUnitId(AD_UNIT_ID);
                    }
                    loadNativeExpressAd(0);
                }catch (Exception e){

                }

            }
        });
    }
    private void loadNativeExpressAd(final int index) {

//        if (index >= mRecyclerViewItems.size()) {
//            return;
//        }

        if (index >= mRecyclerViewItems.size()) {
            return;
        }

        Object item = mRecyclerViewItems.get(index);
        if (!(item instanceof NativeExpressAdView)) {
            throw new ClassCastException("Expected item at index " + index + " to be a Native"
                    + " Express ad.");
        }

        final NativeExpressAdView adView = (NativeExpressAdView) item;
        // Set an AdListener on the NativeExpressAdView to wait for the previous Native Express ad
        // to finish loading before loading the next ad in the items list.
        adView.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                super.onAdLoaded();
                // The previous Native Express ad loaded successfully, call this method again to
                // load the next ad in the items list.
                if (index<24){
                loadNativeExpressAd(index + ITEMS_PER_AD);
                }
            }

            @Override
            public void onAdFailedToLoad(int errorCode) {
                // The previous Native Express ad failed to load. Call this method again to load
                // the next ad in the items list.
                Log.e("MainActivity", "The previous Native Express ad failed to load. Attempting to"
                        + " load the next Native Express ad in the items list.");
                //loadNativeExpressAd(index + ITEMS_PER_AD);
            }
        });
        try {
            adView.loadAd(new AdRequest.Builder().build());
        }catch (Exception e){}

    }

和我的RecyclerViewAdapter.java

class RecyclerViewAdapter extends FastScrollRecyclerView.Adapter<RecyclerView.ViewHolder>  {
    private static final int MENU_ITEM_VIEW_TYPE = 0;
    private static final int NATIVE_EXPRESS_AD_VIEW_TYPE = 1;
    private final Context mContext;
    private final List<Object> mRecyclerViewItems;

    ItemClickListener listener;
    public RecyclerViewAdapter(Context context, List<Object> recyclerViewItems, ItemClickListener listener) {
        this.mContext = context;
        this.mRecyclerViewItems = recyclerViewItems;
        this.listener=listener;
    }

    public class MenuItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView menuItemName;
        private TextView menuItemDescription;
        private TextView menuItemPrice;
        private TextView menuItemCategory;
        private ImageView menuItemImage;
        ItemClickListener itemClickListener;

        MenuItemViewHolder(View view) {
            super(view);
            menuItemImage = (ImageView) view.findViewById(R.id.cinsiyetresmi);
            menuItemName = (TextView) view.findViewById(R.id.menu_item_name);
            menuItemPrice = (TextView) view.findViewById(R.id.menu_item_price);
            menuItemCategory = (TextView) view.findViewById(R.id.menu_item_category);
            menuItemDescription = (TextView) view.findViewById(R.id.menu_item_description);
            view.setOnClickListener(this);
        }
        @Override
        public void onClick(View v) {
            this.itemClickListener.onItemClick(v,getLayoutPosition());
        }

        public void setItemClickListener(ItemClickListener ic)
        {
            this.itemClickListener=ic;

        }
    }

    public class NativeExpressAdViewHolder extends RecyclerView.ViewHolder  {

        NativeExpressAdViewHolder(View view) {
            super(view);
        }

    }

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

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

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        switch (viewType) {
            case MENU_ITEM_VIEW_TYPE:
                View menuItemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(
                        R.layout.menu_item_container, viewGroup, false);
                return new MenuItemViewHolder(menuItemLayoutView);
            case NATIVE_EXPRESS_AD_VIEW_TYPE:
                // 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(RecyclerView.ViewHolder holder, int position) {
        int viewType = getItemViewType(position);
        MenuItem menuItem;
        MenuItemViewHolder menuItemHolder;
        switch (viewType) {
            case MENU_ITEM_VIEW_TYPE:
                menuItemHolder = (MenuItemViewHolder) holder;
                menuItem = (MenuItem) mRecyclerViewItems.get(position);

                // Get the menu item image resource ID.
                String imageName = menuItem.getImageName();
                int imageResID = mContext.getResources().getIdentifier(imageName, "drawable",
                        mContext.getPackageName());

                // Add the menu item details to the menu item view.
                menuItemHolder.menuItemImage.setImageResource(imageResID);
                menuItemHolder.menuItemName.setText(menuItem.getName());
                menuItemHolder.menuItemPrice.setText(menuItem.getPrice());
                menuItemHolder.menuItemCategory.setText(menuItem.getCategory());


                menuItemHolder.menuItemDescription.setText(menuItem.getDescription());
                final  int idsi= Integer.parseInt(menuItem.getDescription());
                menuItemHolder.setItemClickListener(new ItemClickListener() {
                    @Override
                    public void onItemClick(View v, int pos) {
                        //Snackbar.make(v,String.valueOf(players.get(pos).getId()), Snackbar.LENGTH_SHORT).show();
                        try {
                            listener.onItemClick(v,idsi);
                        }
                        catch (Exception e){
                        }
                        //Toast.makeText(this.getApplicationContext(), "bak", Toast.LENGTH_LONG).show();
                    }
                });

                break;
            case NATIVE_EXPRESS_AD_VIEW_TYPE:
                // fall through
            default:

                    NativeExpressAdViewHolder nativeExpressHolder =
                            (NativeExpressAdViewHolder) holder;
                    NativeExpressAdView adView =
                            (NativeExpressAdView) mRecyclerViewItems.get(position);
                    ViewGroup adCardView = (ViewGroup) nativeExpressHolder.itemView;

                    if (adCardView.getChildCount() > 0) {
                        adCardView.removeAllViews();
                    }
                    if (adView.getParent() != null) {
                        ((ViewGroup) adView.getParent()).removeView(adView);
                    }

                    // Add the Native Express ad to the native express ad view.
                    adCardView.addView(adView);

        }
    }

}
android recycler-adapter google-admob
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.