Android 在回收商视图中显示广告

Android 在回收商视图中显示广告,android,android-recyclerview,ads,recyclerview-layout,Android,Android Recyclerview,Ads,Recyclerview Layout,我正在使用Recycler视图,在该视图中,我必须在GridLayout Manager中显示两个项目,跨度计数为2 GridLayoutManager gridLayoutManager; gridLayoutManager = new GridLayoutManager(getActivity(), 2); newsRecycler.setLayoutManager(gridLayoutManager); 主要问题是,我必须在四个项目(即2行)后显示广告 这将覆盖手机的宽度。但由于跨度

我正在使用Recycler视图,在该视图中,我必须在GridLayout Manager中显示两个项目,跨度计数为2

GridLayoutManager gridLayoutManager;

gridLayoutManager = new GridLayoutManager(getActivity(), 2);

newsRecycler.setLayoutManager(gridLayoutManager);
主要问题是,我必须在四个项目(即2行)后显示广告 这将覆盖手机的宽度。但由于跨度计算,广告也将采用网格布局。任何帮助都将不胜感激

输出如下:-

预期产出:--

适配器类:-

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {



private List<HomeNewsDataModel> homeNewsDataModels;

public NewsAdapter(FragmentActivity activity, List<HomeNewsDataModel> homeNewsDataModels) {
    this.activity = activity;
    this.homeNewsDataModels=homeNewsDataModels;

}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {

    View v = null;



        v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.news_item_layout, viewGroup, false);
        return new ContentViewHolder(v);
    }


}

private final int  CONTENT_TYPE=1;

private final int AD_TYPE=2;

@Override
public int getItemViewType(int position)
{
    if (position % 4 == 0)
        return AD_TYPE;
    return CONTENT_TYPE;
}


class ViewHolder extends RecyclerView.ViewHolder {

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


    }


}

class ContentViewHolder extends ViewHolder {



    @BindView(R.id.news_item)
    LinearLayout newsItem;

    @BindView(R.id.news_image)
    ImageView newsImage;

    @BindView(R.id.tv_title)
    TextView tvTitle;


    @BindView(R.id.play_video_bt)
    Button playVideoBt;

    @BindView(R.id.news_main)
    LinearLayout news_main;




    public ContentViewHolder(View itemView) {
        super(itemView);
        ButterKnife.bind(this, itemView);


    }




}

class ADViewHolder extends ViewHolder {



    @BindView(R.id.ad_item)
    LinearLayout ad_item;

    @BindView(R.id.ad_image_image)
    ImageView ad_image_image;




    public ADViewHolder(View itemView) {
        super(itemView);
        ButterKnife.bind(this, itemView);


    }

    private void bindData() {






    }



}

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


}


@Override
public int getItemCount() {
    return homeNewsDataModels.size();
}
公共类NewsAdapter扩展了RecyclerView.Adapter{ 私有列表homeNewsDataModels; 公共新闻适配器(FragmentActivity活动,列出homeNewsDataModels){ 这个。活动=活动; this.homeNewsDataModels=homeNewsDataModels; } @凌驾 public ViewHolder onCreateViewHolder(ViewGroup ViewGroup,int viewType){ 视图v=null; v=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.news\u item\u布局,viewGroup,false); 返回新的ContentViewHolder(v); } } 私有最终整数内容类型=1; 专用最终int AD_类型=2; @凌驾 public int getItemViewType(int位置) { 如果(位置%4==0) 返回AD_类型; 返回内容类型; } 类ViewHolder扩展了RecyclerView.ViewHolder{ 公共视图持有者(视图项视图){ 超级(项目视图); } } 类ContentViewHolder扩展了ViewHolder{ @BindView(R.id.news\u项目) 线性布局新闻项目; @BindView(R.id.news\u图像) 图像查看新闻图像; @BindView(R.id.tv_标题) 文本视图标题; @BindView(R.id.播放视频) 按钮播放视频; @BindView(R.id.news\u main) 主要新闻的线性布局; 公共内容视图持有者(视图项视图){ 超级(项目视图); ButterKnife.bind(这个,itemView); } } 类AdvieWolder扩展了ViewHolder{ @BindView(R.id.ad_项目) 线性布置ad_项目; @BindView(R.id.ad_图像_图像) 图像查看广告图像; 公共顾问(查看项目视图){ 超级(项目视图); ButterKnife.bind(这个,itemView); } 私有void bindData(){ } } @凌驾 公共无效onBindViewHolder(最终视图持有人,最终整型位置){ } @凌驾 public int getItemCount(){ 返回homeNewsDataModels.size(); } }

news\u item\u layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/news_item"
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="@dimen/generic_content_padding">

    <LinearLayout
        android:id="@+id/news_main"
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:visibility="visible"
        >

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/news_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:src="@drawable/img_place_holder"/>

        <Button
            android:id="@+id/play_video_bt"
            android:layout_width="50dp"
            android:layout_height="40dp"
            android:visibility="gone"
            android:background="@drawable/play_video_icon"
            android:layout_centerInParent="true"
            />

    </RelativeLayout>


    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title 1"
        android:textSize="@dimen/text_medium_small"
        android:maxLines="2"
        android:textColor="@color/app_black"
        android:layout_marginTop="@dimen/generic_content_padding"

        />
    </LinearLayout>



</LinearLayout>
 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      android:id="@+id/ad_item"
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical">

            <ImageView
             android:id="@+id/ad_image_image"
             android:layout_width="match_parent"
             android:layout_height="100dp"
             android:adjustViewBounds="true"
             android:src="@drawable/img_place_holder"/>


     </LinearLayout>

ad_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/news_item"
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="@dimen/generic_content_padding">

    <LinearLayout
        android:id="@+id/news_main"
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:visibility="visible"
        >

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/news_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:src="@drawable/img_place_holder"/>

        <Button
            android:id="@+id/play_video_bt"
            android:layout_width="50dp"
            android:layout_height="40dp"
            android:visibility="gone"
            android:background="@drawable/play_video_icon"
            android:layout_centerInParent="true"
            />

    </RelativeLayout>


    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title 1"
        android:textSize="@dimen/text_medium_small"
        android:maxLines="2"
        android:textColor="@color/app_black"
        android:layout_marginTop="@dimen/generic_content_padding"

        />
    </LinearLayout>



</LinearLayout>
 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      android:id="@+id/ad_item"
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical">

            <ImageView
             android:id="@+id/ad_image_image"
             android:layout_width="match_parent"
             android:layout_height="100dp"
             android:adjustViewBounds="true"
             android:src="@drawable/img_place_holder"/>


     </LinearLayout>

好的,我终于找到了解决方案。我做错的是把错误的条件,而不是膨胀正确的布局-广告的布局

这里是最后一个适配器类。其余的都一样。在CreateViewHolder上所做的更改,每4个项目后在位置5处膨胀广告版面

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {

        View v = null;

        if (viewType == CONTENT_TYPE) {    
            v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.news_item_layout, viewGroup, false);
            return new ContentViewHolder(v);
        } else {
            v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ad_layout, viewGroup, false);
            return new ADViewHolder(v);
        }
    }
以及以下功能中的一些更改:

    @Override
    public int getItemViewType(int position) {
        if ((position+1) % 5 == 0 && (position+1) != 1) {
            return AD_TYPE;
        }
        return CONTENT_TYPE;
    }

希望将来能对别人有所帮助。谢谢。

您可以使用两种类型的视图。查找spansize查找。差不多。根据您的要求进行修改解决此问题吗?发布适配器类和项xmlalso@quicklearner我更新了我的问题,添加了适配器类和项目xml。请看一下。请输入BindViewHolder代码。我在第二个布局上出错了。