简体   繁体   English

如何在android中的位置2的Recycler视图中添加广告?

[英]How to add ads in recycler view at position 2 in android?

I have a recycler view in which i fetch news feed using rss reader and at index 2 of recycler view i want to place an ad view but don't know how to place it. 我有一个回收站视图,其中我使用rss阅读器获取新闻源,并且在回收站视图的索引2处我想放置广告视图但不知道如何放置它。 Kindly provide me immediate solution regarding this issue. 请为我提供有关此问题的即时解决方案。

code for recycler view:- 回收者视图的代码: -

  private Context mContext;
private View main;
private RecyclerView m_newsList;
private RecyclerView.LayoutManager m_layoutManager;
private CNewsAdapter m_newsAdapter;
String tagname;
ArrayList<CNewsModel> feeds = new ArrayList<CNewsModel>();
private RelativeLayout m_mainLayout;
private String URL = "http://gadgets.ndtv.com/rss/feeds";
private LinearLayout m_noInternetWarning;
private ImageButton m_BtnRetry;
private ProgressBar m_loadingProgress;
CNewsModel feed;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    main = inflater.inflate(R.layout.reward_news_activity, container, false);
    mContext = getActivity();
    m_mainLayout = (RelativeLayout) main.findViewById(R.id.news_main_layout);
    findViewById();
    readRss();
    return main;
}

/*Loading news through Rss reader*/
private void readRss() {
    if (RewardUtil.isConnected(mContext)) {
        new LoadFeed().execute(URL);
    } else {
        m_noInternetWarning.setVisibility(View.VISIBLE);
        m_loadingProgress.setVisibility(View.GONE);
    }
}

private void findViewById() {
    m_BtnRetry = (ImageButton) main.findViewById(R.id.news_btn_retry);
    m_BtnRetry.setOnClickListener(this);
    m_noInternetWarning = (LinearLayout) main.findViewById(R.id.news_no_internet_warning);
    m_loadingProgress = (ProgressBar) main.findViewById(R.id.news_loadingProgress);

    m_newsList = (RecyclerView) main.findViewById(R.id.news_list);
    m_layoutManager = new LinearLayoutManager(mContext);
    m_newsList.setLayoutManager(m_layoutManager);
}

@Override
public void onClick(View v) {
    if (v == m_BtnRetry) {
        if (RewardUtil.isConnected(mContext)) {
            m_noInternetWarning.setVisibility(View.GONE);
            m_loadingProgress.setVisibility(View.VISIBLE);
            new LoadFeed().execute(URL);
        } else {
            CSnackBar.showSnackBarError(m_mainLayout, getResources().getString(R.string.no_internet_connection_warning));
        }
    }
}

/*Loading news Throudgh Rss reader*/
private class LoadFeed extends AsyncTask<String, Void, ArrayList<CNewsModel>> {
    @Override
    protected ArrayList<CNewsModel> doInBackground(String... arg0) {
        XmlPullParserFactory factory = null;
        XmlPullParser parser = null;
        try {
            factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            parser = factory.newPullParser();
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet method = new HttpGet(new URI(arg0[0]));
            HttpResponse res = client.execute(method);
            InputStream is = res.getEntity().getContent();
            parser.setInput(new InputStreamReader(is));
            int eventType = parser.getEventType();
            feed = new CNewsModel();
            String text = "";
            while (eventType != XmlPullParser.END_DOCUMENT) {
                tagname = parser.getName();
                //Log.d(tagname, "tagname");
                switch (eventType) {
                    case XmlPullParser.START_TAG:
                        if (tagname.equalsIgnoreCase("item")) {
                            feed = new CNewsModel();
                        }
                        break;
                    case XmlPullParser.TEXT:
                        text = parser.getText();
                        break;
                    case XmlPullParser.END_TAG:
                        if (tagname.equalsIgnoreCase("item")) {
                            feeds.add(feed);
                        } else if (tagname.equalsIgnoreCase("title")) {
                            feed.setTitle(text);
                        } else if (tagname.equalsIgnoreCase("description")) {
                            feed.setDesc(text);
                        } else if (tagname.equalsIgnoreCase("link")) {
                            feed.setLinks(text);
                        } else if (tagname.equalsIgnoreCase("storyimage")) {
                            feed.setImage_list(text);
                        } else if (tagname.equalsIgnoreCase("pubDate")) {
                            feed.setPub_date(text);
                        }
                        break;
                    default:
                        break;
                }
                eventType = parser.next();
            }
        } catch (XmlPullParserException | IOException | URISyntaxException e) {
            e.printStackTrace();
        }
        return feeds;
    }

    @Override
    protected void onPostExecute(final ArrayList<CNewsModel> cNewsModels) {
        super.onPostExecute(cNewsModels);
        m_loadingProgress.setVisibility(View.GONE);
        m_newsAdapter = new CNewsAdapter(mContext, cNewsModels, new RecyclerViewClickListener() {
            @Override
            public void recyclerViewListClicked(View v, int position) {
                Toast.makeText(mContext, "Clicked::" + position, Toast.LENGTH_LONG).show();
                Intent i = new Intent(mContext, CNewsView.class);
                i.putExtra("Link", cNewsModels.get(position).getLinks());
                mContext.startActivity(i);
            }
        });
        m_newsList.setAdapter(m_newsAdapter);
    }
}

} }

and code for adapter 和适配器的代码

  private static final String TAG = CNewsAdapter.class.getSimpleName();
private Context mContext;
private ArrayList<CNewsModel> models;
private static RecyclerViewClickListener itemListener;

public CNewsAdapter(Context context, ArrayList<CNewsModel> mList, RecyclerViewClickListener itemListener) {
    this.mContext = context;
    this.models = mList;
    this.itemListener = itemListener;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == 2) {
        View adView = LayoutInflater.from(parent.getContext()).inflate(R.layout.ad, parent, false);
        return new AdsHolder(adView);
    } else {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.rewards_news_card, parent, false);
        return new ItemHolder(itemView);
    }
}

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    CNewsModel pm = models.get(holder.getAdapterPosition());
    if (holder instanceof AdsHolder) {
        final AdsHolder adsHolder = (AdsHolder) holder;
        adsHolder.oNativeExpressAdview.setText("This is AdView");
    } else if (holder instanceof ItemHolder) {
        final ItemHolder itemHolder = (ItemHolder) holder;
        itemHolder.m_newsTitle.setText(pm.getTitle());
        itemHolder.m_newsTime.setText(pm.getPub_date());
        itemHolder.m_newsHeadline.setText(pm.getDesc());
        Picasso.with(mContext).load(pm.getImage_list()).into(itemHolder.m_newsImage, new Callback() {
            @Override
            public void onSuccess() {
                Log.d(TAG, "OnSuccess Called::");
            }

            @Override
            public void onError() {
                Log.d(TAG, "OnError Called::");

            }
        });

    }

}

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

@Override
public int getItemViewType(int position) {
    if (position == 2) {
        return 1;
    } else {
        return 2;
    }
}

public class ViewHolder extends RecyclerView.ViewHolder {
    public ViewHolder(View itemView) {
        super(itemView);
    }
}

private class AdsHolder extends ViewHolder {
    private TextView oNativeExpressAdview;

    public AdsHolder(View adView) {
        super(adView);
        oNativeExpressAdview = (TextView) adView.findViewById(R.id.adView);
    }
}

private class ItemHolder extends ViewHolder implements View.OnClickListener {
    private TextView m_newsTitle, m_newsTime, m_newsHeadline;
    private ImageView m_newsImage;

    public ItemHolder(View itemView) {
        super(itemView);
        m_newsTitle = (TextView) itemView.findViewById(R.id.tv_news_header);
        m_newsTime = (TextView) itemView.findViewById(R.id.tv_news_time);
        m_newsHeadline = (TextView) itemView.findViewById(R.id.tv_news_headline);
        m_newsImage = (ImageView) itemView.findViewById(R.id.iv_news_image);
        itemView.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        itemListener.recyclerViewListClicked(v, this.getLayoutPosition());
    }
}

} }

create one layout which holds ad after that in adapter add

      @Override
            public int getItemViewType(int position) {
                switch (position){
                    case 0:
                        return 1;
                    case 1:
                        return 2;

                    default:
                        return 0;
                }
            }


      @Override
            public RecyclerAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

                switch (viewType) {
                    case 1:
                    /*your main item*/
                        View viewONE = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_item, parent, false);

                        RecyclerAdapter.CustomViewHolder rowONE = new RecyclerAdapter.CustomViewHolder(viewONE);
                        return rowONE;

                    case 2:
                    /** your ad layout*/
                        View viewTWO = LayoutInflater.from(parent.getContext()).inflate(R.layout.ad_layout, parent, false);

                        RecyclerAdapter.CustomViewHolder rowTWO = new RecyclerAdapter.CustomViewHolder(viewTWO);
                        return rowTWO;
                }
                return null;
            }


in onBind 
  @Override
        public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int i) {
            switch (viewHolder.getItemViewType()) {
                case 1:
                    ItemHolder vh1 = (ItemHolder ) viewHolder;
                    configureViewHolder1(vh1, i);
                    break;

                case 2:
                    AdsHolder  vh2 = (AdsHolder ) viewHolder;
                    configureViewHolder2(vh2, i);
                    break;
            }
        }

    >    private void configureViewHolder1(final LoadingVH vh1, int
    > position) {
    >          //change your item data here    }
    > 
    > 
    >  private void configureViewHolder2(final ViewHolder2 vh1, int
    > position) {
    >             // change ad data here
    >                    }
  @Override
public int getItemViewType(int position) {
    if (position == 2) {
        return 2;
    } else {
        return 1;
    }
}


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == 2) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.row_ads, parent, false);

            return new AdsHolder(view);
        } else {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.row_mainlayout, parent, false);

            return new MainHolder(view);
        }
    }

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

       CNewsModel pm = models.get(holder.getAdapterPosition());

        if (holder instanceof AdsHolder) {

            final AdsHolder holder1 = (AdsHolder) holder;

        }else if(holder instanceof MainHolder){

            final MainHolder holder2 = (MainHolder) holder;
            holder2.m_newsTitle.setText(pm.getTitle());
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 position 在回收站视图中添加 onclciklistner - How to add onclciklistner in recycler view with its position 如何通过位置android在回收器视图中突出显示项目 - How to highlight a item in recycler view by position android 如何在Android中找到回收站视图位置? - How to find Recycler view position in android? 如何在回收站视图 android 中放置 Admob 原生高级广告? - How to place Admob Native Advanced Ads in recycler view android? 如何在Android的回收器视图中添加多个视图 - How to add multiple view in recycler view in android 回收商视图中的Facebook原生广告android - Facebook Native ads in recycler view android admob 原生广告添加到回收站视图后,Android 得到正确的项目 position - Android get correct item position after admob native ads are added to recycler view Admob广告未在Android回收器视图中展示 - Admob ads not showing in Android recycler view 如何在Android的Firebase Recycler视图中添加按钮? - How to add a button to Firebase Recycler view in Android? 如何在Android的回收器视图中滚动到特定位置(不在视图中)的项目? - How to scroll to an item at specific position (that is not in view), in recycler view in android?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM