Android 如何在recyclerview中使用不同的布局?

Android 如何在recyclerview中使用不同的布局?,android,android-recyclerview,Android,Android Recyclerview,如何在recyclerview中使用两种不同的布局 我有新闻版面(一,新闻版面(二),但我不知道如何使用两个版面请帮我写这段代码。。。谢谢 公共类CardAdapter扩展了RecyclerView.Adapter{ //Imageloader to load image private ImageLoader imageLoader; private Context context; private Activity activity; private LayoutInflater infla

如何在recyclerview中使用两种不同的布局

我有新闻版面(一新闻版面(二),但我不知道如何使用两个版面请帮我写这段代码。。。谢谢

公共类CardAdapter扩展了RecyclerView.Adapter{

//Imageloader to load image
private ImageLoader imageLoader;
private Context context;
private Activity activity;
private LayoutInflater inflater;

private static String Title="title";
private static String Genre="genre";
private static String Rating="rating";



//List to store all superheroes
List<SuperHero> superHeroes;

//Constructor of this class
public CardAdapter(List<SuperHero> superHeroes, Context context){
    super();
    //Getting all superheroes
    this.superHeroes = superHeroes;
    this.context = context;
}




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


        View  v = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_layout_one, parent, false);
         ViewHolder viewHolder = new ViewHolder(v);
         return viewHolder;
}




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

    //Getting the particular item from the list
    final SuperHero superHero =  superHeroes.get(position);
    //Loading image from url
    imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
    imageLoader.get(superHero.getThumbnailUrl(), ImageLoader.getImageListener(holder.imageView, R.drawable.au_small_logo, android.R.drawable.ic_dialog_alert));

    //Showing data on the views
    holder.imageView.setImageUrl(superHero.getThumbnailUrl(), imageLoader);
    holder.textViewName.setText(superHero.getTitle());
    holder.textViewPublisher.setText(superHero.getRating());
    holder.secid.setText(superHero.getSec_id());
    holder.category.setText(superHero.getCategory());



    holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(v.getContext(), News_Detail.class);

            intent.putExtra("images", superHero.getThumbnailUrl());
            intent.putExtra(Title, superHero.getTitle());
            intent.putExtra(Genre, superHero.getGenre());
            intent.putExtra(Rating, superHero.getRating());
            v.getContext().startActivity(intent);
        }
    });



    holder.share.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick( View view)
        {
            Intent intent = new Intent(android.content.Intent.ACTION_SEND);
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_TEXT,  "\n" + "\n" + "http://abc.news/News/"+holder.secid.getText().toString()+"/"+holder.category.getText().toString());
            view.getContext().startActivity(intent);
        }

    });
}

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

class ViewHolder extends RecyclerView.ViewHolder{
    //Views
    public NetworkImageView imageView;
    public TextView textViewName;
    public TextView textViewPublisher;
    public TextView secid;
    public TextView category;
    public RelativeLayout relativeLayout;
    public ImageView share;

    //Initializing Views
    public ViewHolder(View itemView) {
        super(itemView);
        imageView = (NetworkImageView) itemView.findViewById(R.id.thumbnail);
        textViewName = (TextView) itemView.findViewById(R.id.title);
        textViewPublisher = (TextView) itemView.findViewById(R.id.rating);
        secid = (TextView) itemView.findViewById(R.id.sec_id);
        category = (TextView) itemView.findViewById(R.id.category);
        relativeLayout = (RelativeLayout) itemView.findViewById(R.id.relat);
        share = (ImageView) itemView.findViewById(R.id.share);

    }
}
//要加载图像的Imageloader
私有图像加载器;
私人语境;
私人活动;
私人充气机;
私有静态字符串Title=“Title”;
私有静态字符串Genre=“Genre”;
私有静态字符串Rating=“Rating”;
//存储所有超级英雄的列表
列出超级英雄;
//这个类的构造函数
公共卡适配器(列出超级英雄、上下文){
超级();
//获得所有超级英雄
这个。超级英雄=超级英雄;
this.context=上下文;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.news\u layout\u one,parent,false);
视窗夹持器视窗夹持器=新视窗夹持器(v);
返回视图持有者;
}
@凌驾
公共无效onBindViewHolder(最终ViewHolder,内部位置){
//从列表中获取特定项
最终超级英雄超级英雄=超级英雄。获取(位置);
//从url加载图像
imageLoader=CustomVolleyRequest.getInstance(上下文).getImageLoader();
imageLoader.get(superHero.getThumbnailUrl(),imageLoader.getImageListener(holder.imageView,R.dravable.au_small_徽标,android.R.dravable.ic_对话框_警报));
//显示视图上的数据
holder.imageView.setImageUrl(superHero.getThumbnailUrl(),imageLoader);
holder.textViewName.setText(superHero.getTitle());
holder.textViewPublisher.setText(superHero.getRating());
holder.secid.setText(superHero.getSec_id());
holder.category.setText(superHero.getCategory());
holder.relativeLayout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent Intent=newintent(v.getContext(),News_Detail.class);
intent.putExtra(“images”,superHero.getThumbnailUrl());
intent.putExtra(Title,superHero.getTitle());
intent.putExtra(流派,superHero.getGenre());
intent.putExtra(Rating,superHero.getRating());
v、 getContext().startActivity(意图);
}
});
holder.share.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图)
{
意图=新意图(android.content.Intent.ACTION\u SEND);
intent.setType(“文本/普通”);
intent.putExtra(intent.EXTRA_文本,“\n”+“\n”+”http://abc.news/News/“+holder.secid.getText().toString()+”/“+holder.category.getText().toString());
view.getContext().startActivity(intent);
}
});
}
@凌驾
public int getItemCount(){
返回超级英雄。大小();
}
类ViewHolder扩展了RecyclerView.ViewHolder{
//观点
公共网络图像视图;
公共文本视图文本视图名称;
公共文本视图文本视图发布者;
公共文本视图secid;
公共文本视图类别;
公共关系;
公共图像共享;
//初始化视图
公共视图持有者(视图项视图){
超级(项目视图);
imageView=(NetworkImageView)itemView.findViewById(R.id.缩略图);
textViewName=(TextView)itemView.findViewById(R.id.title);
textViewPublisher=(TextView)itemView.findViewById(R.id.rating);
secid=(TextView)itemView.findViewById(R.id.sec_id);
category=(TextView)itemView.findViewById(R.id.category);
relativeLayout=(relativeLayout)itemView.findViewById(R.id.relat);
share=(ImageView)itemviewbyd(R.id.share);
}
}

}

您需要覆盖
getItemViewType(int位置)
,如下所示:

class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
    private static final int VIEW_TYPE_ONE = 1;
    private static final int VIEW_TYPE_TWO = 2;

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == VIEW_TYPE_ONE) {
            // inflate first view type
        } else {
            // inflate second view type
        }
    }

    @Override
    public int getItemViewType(int position) {
        // return your ViewType depending on position here
    }
}
class CardAdapter扩展了RecyclerView.Adapter{
私有静态最终int视图类型=1;
私有静态最终int视图类型=2;
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
如果(视图类型==视图类型){
//充气第一视图类型
}否则{
//充气第二视图类型
}
}
@凌驾
public int getItemViewType(int位置){
//根据此处的位置返回视图类型
}
}

然后,您必须通过
holder.getItemViewType()

onBindViewHolder
中执行与在
onCreateViewHolder
中相同的逻辑,您必须为不同的布局创建不同的viewHolder类,并在onCreateViewHolder中附加不同的视图。以下是一个例子:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view;
    RecyclerView.ViewHolder viewHolder;

    switch (viewType) {
        case TYPE_ONE: {
            view = getLayoutView(parent, R.layout.list_one);
            viewHolder = new OneViewHolders(view, currActivity);
            break;
        }
        case TYPE_TWO: {
            view = getLayoutView(parent, R.layout.list_two);
            viewHolder = new TwoViewHolders(view, currActivity, getItem(viewType));
            break;
        }
        case TYPE_THREE: {
            view = getLayoutView(parent, R.layout.list_three);
            viewHolder = new ThreeViewHolders(view, currActivity, getItem(viewType));
            break;
        }
        default: {
            viewHolder = null;
        }

    }
    return viewHolder;
}

然后创建三个不同的viewHolder类(在本例中为一个viewHolder、两个viewHolder、三个viewHolder)并在其中定义视图。

请参见
RecyclerView.Adapter#getItemViewType
您能粘贴完整的代码吗请填写完整的代码?那你打算怎么办?