简体   繁体   中英

How to load AdMobs inside RecycleView after every 5th row?

I am trying to implement AdMobs to load ads, every 5th row but i am having a difficult time, as you can see from my screenshot ads are being loaded successfully but they're being loaded after every row. Can someone help me accomplish this? I already tried reading through post on stack overflow but none seems to help. Thank you in advance. image screenshot

Fragment

public class SectorPerformanceFragment extends Fragment {
    private RecyclerView newsFeedRecycleView;
    private SectorPerformanceAdapter mostActiveAdapter;


    private RecyclerViewAdopter recyclerViewAdopter;

    public static final int ITEMS_PER_AD = 9;


    private RecyclerView.LayoutManager layoutManager;

    private RequestQueue requestQueue;
    private JSONObject stockDetails;

    public static ArrayList<SectorPerformanceModel> mostActiveArrayList;


    private RequestQueue requestQueues;

    private ImageView backImage;




    private View rootView;
    private ProgressBar loadingProgressBar;

    private TextView sectorNameTv;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {


        rootView = inflater.inflate(R.layout.recycle_view_list_ui, container, false);

        sectorNameTv = rootView.findViewById(R.id.sectorNameTv);

        sectorNameTv.setText("Sector Performance");

        loadingProgressBar = rootView.findViewById(R.id.loadingProgressBar);


        backImage = rootView.findViewById(R.id.backImageView);

        backImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                getActivity().getSupportFragmentManager().popBackStack();




//
//                Fragment generalMarketFragment = new BrowseFragment();
//                FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
//                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//                fragmentTransaction.replace(R.id.fragment_container, generalMarketFragment);
//                fragmentTransaction.addToBackStack(null);
//                fragmentTransaction.commit();




            }
        });


        requestQueues = Volley.newRequestQueue(getActivity());
        findViewById();
        mostActiveArrayList = new ArrayList<>();
        initRecycleView();

        retreiveBundleInformation();

        return rootView;


    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }


    private void findViewById() {

        newsFeedRecycleView = rootView.findViewById(R.id.recylcle_view_list);

    }


    //set up RecycleVIew/listener to detect taps layout manager tels recycle view how to display the list.. without it, nothing shows up
    public void initRecycleView() {

        layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
        newsFeedRecycleView.setHasFixedSize(true);
        newsFeedRecycleView.setLayoutManager(layoutManager);



        //mostActiveAdapter = new SectorPerformanceAdapter(getContext(), mostActiveArrayList);

//        recyclerViewAdopter = new RecyclerViewAdopter(getContext(),mostActiveArrayList);
//
//        //newsFeedRecycleView.setAdapter(mostActiveAdapter);
//        newsFeedRecycleView.setAdapter(recyclerViewAdopter);


    }


    //download news data stocknewsapi..
    private void downloadStockList(String api) {


        // Initialize a new JsonArrayRequest instance
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
                Request.Method.GET,
                api,
                null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        // Do something with response
                        //mTextView.setText(response.toString());

                        loadingProgressBar.setVisibility(View.INVISIBLE);

                        //Log.i("jsonResponse", response.toString());

                        // Process the JSON
                        // Loop through the array elements
                        for (int i = 0; i < response.length(); i++) {
                            // Get current json object

                            try {
                                stockDetails = response.getJSONObject(i);

                                Log.i("stockDetails", stockDetails.toString());







                                SectorPerformanceModel sectorPerformanceModel2 = new SectorPerformanceModel(stockDetails.getString("sector"),stockDetails.getString("changesPercentage"),1);


                                mostActiveArrayList.add((sectorPerformanceModel2));


                                SectorPerformanceModel sectorPerformanceModel3 = new SectorPerformanceModel(stockDetails.getString("sector"),stockDetails.getString("changesPercentage"),2);

                                mostActiveArrayList.add(mostActiveArrayList.size(),sectorPerformanceModel3);







                                recyclerViewAdopter = new RecyclerViewAdopter(getContext(),mostActiveArrayList);

                                //newsFeedRecycleView.setAdapter(mostActiveAdapter);
                                newsFeedRecycleView.setAdapter(recyclerViewAdopter);



                                //recyclerViewAdopter.notifyDataSetChanged();

//                                mostActiveArrayList.add(sectorPerformanceModel);
//                                mostActiveAdapter.notifyDataSetChanged();


                            } catch (JSONException e) {
                                e.printStackTrace();
                            }


                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                        Log.i("error", error.toString());


                    }
                }
        );


        // Add JsonArrayRequest to the RequestQueue
        requestQueues.add(jsonArrayRequest);
    }


    public void retreiveBundleInformation() {
        downloadStockList("APIKEY");


    }



    }

Adapter

[public class RecyclerViewAdopter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private Context mContext;
    private List<SectorPerformanceModel> mList;

    public RecyclerViewAdopter(Context mContext, List<SectorPerformanceModel> mList) {
        this.mList = mList;
        this.mContext = mContext;
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView name;
        private TextView newsTitle, sourceName, epsEstiatmate;
        private CircleImageView newsThumbImage;

        public MyViewHolder(View view) {
            super(view);

            epsEstiatmate = itemView.findViewById(R.id.formTypeTv);


            newsTitle = itemView.findViewById(R.id.tickerTv);
            sourceName = itemView.findViewById(R.id.dateTv);
            newsThumbImage= itemView.findViewById(R.id.defaultImageColor);


            newsThumbImage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Log.i("tapped","TAPPED");
                }
            });
        }
    }

    public static class ViewHolderAdMob extends RecyclerView.ViewHolder {
        public AdView mAdView;
        public ViewHolderAdMob(View view) {
            super(view);


            mAdView = (AdView) view.findViewById(R.id.adView);

            AdRequest adRequest = new AdRequest.Builder()
                    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                    .build();
            mAdView.loadAd(adRequest);
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        RecyclerView.ViewHolder viewHolder = null;
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        switch(viewType){
            case 1:{
                View v = inflater.inflate(R.layout.trending_stock_row, parent, false);
                viewHolder = new MyViewHolder(v);
                break;
            }
            case 2:{
                View v = inflater.inflate(R.layout.ads_row, parent, false);
                viewHolder = new ViewHolderAdMob(v);
                break;
            }
        }
        return viewHolder;
    }

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

        SectorPerformanceModel model= mList.get(holder.getAdapterPosition());

        switch(holder.getItemViewType()){
            case 1:{
                MyViewHolder viewHolder = (MyViewHolder) holder;


                Random r = new Random();
                int red = r.nextInt(255 - 0 + 1) + 0;
                int green = r.nextInt(255 - 0 + 1) + 0;
                int blue = r.nextInt(255 - 0 + 1) + 0;

                GradientDrawable draw = new GradientDrawable();
                draw.setShape(GradientDrawable.OVAL);
                draw.setColor(Color.rgb(red, green, blue));

                viewHolder.newsThumbImage.setBackground(draw);

                viewHolder.newsTitle.setText(model.getSector());
                viewHolder.sourceName.setText(model.getChangesPercentage());




                break;
            }
            case 2:{
                break;
            }
        }
    }

    @Override
    public int getItemViewType(int position) {
        return mList.get(position).getViewType();
    }

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



}][1]

It looks like you are adding 2 items to your adapter's data source for each element in your API response: one element has viewType 1 and the other viewType 2:

SectorPerformanceModel sectorPerformanceModel2 = new SectorPerformanceModel(stockDetails.getString("sector"),stockDetails.getString("changesPercentage"),1);
mostActiveArrayList.add((sectorPerformanceModel2));

SectorPerformanceModel sectorPerformanceModel3 = new SectorPerformanceModel(stockDetails.getString("sector"),stockDetails.getString("changesPercentage"),2);
mostActiveArrayList.add(mostActiveArrayList.size(),sectorPerformanceModel3);

Your adapter is rendering items with viewType 2 as ad rows, so if you want to display an ad row every 5 rows you'll need to update the downloadStockList method to execute this

SectorPerformanceModel sectorPerformanceModel3 = new SectorPerformanceModel(stockDetails.getString("sector"),stockDetails.getString("changesPercentage"),2);
mostActiveArrayList.add(mostActiveArrayList.size(),sectorPerformanceModel3);

only after having added 4 items with viewType 1.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM