recyclerview实现多种布局

在Android中,使用RecyclerView实现多种布局可以通过创建一个RecyclerView.Adapter的子类,并重写getItemViewType方法来返回不同的视图类型,然后在onCreatViewHolder方法中根据视图类型创建不同的ViewHolder。

以下是一个简单的例子:

public class MultipleLayoutAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
 
    private static final int TYPE_ITEM = 0;
    private static final int TYPE_BANNER = 1;
    private List<Object> items; // 假设我们有一个Object列表,可以包含不同类型的对象
 
    public MultipleLayoutAdapter(List<Object> items) {
        this.items = items;
    }
 
    @Override
    public int getItemViewType(int position) {
        Object item = items.get(position);
        if (item instanceof Banner) { // 假设Banner是一个用于展示banner的类
            return TYPE_BANNER;
        } else {
            return TYPE_ITEM;
        }
    }
 
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TYPE_ITEM) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
            return new ItemViewHolder(view);
        } else if (viewType == TYPE_BANNER) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.banner_layout, parent, false);
            return new BannerViewHolder(view);
        }
        throw new IllegalArgumentException("Invalid view type");
    }
 
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof ItemViewHolder) {
            // 绑定普通布局的数据
        } else if (holder instanceof BannerViewHolder) {
            // 绑定Banner布局的数据
        }
    }
 
    @Override
    public int getItemCount() {
        return items.size();
    }
 
    public static class ItemViewHolder extends RecyclerView.ViewHolder {
        // ...
    }
 
    public static class BannerViewHolder extends RecyclerView.ViewHolder {
        // ...
    }
}

在这个例子中,我们定义了两种不同的视图类型:TYPE_ITEMTYPE_BANNER。在onCreateViewHolder方法中,根据不同的视图类型创建不同的ViewHolder。在onBindViewHolder方法中,根据不同的ViewHolder类型绑定数据。这样,你就可以在RecyclerView中展示多种布局了,动手试一下吧。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Kotlin实现RecyclerView多种item布局,需要创建多个ViewHolder来适配不同的布局类型。具体步骤如下: ```kotlin // 创建一个通用的ViewHolder类 class BaseViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { // 绑定数据的方法 fun bindData(data: Any) { // 根据不同的数据类型,绑定不同的布局 when (data) { is TypeA -> { // 绑定TypeA布局 } is TypeB -> { // 绑定TypeB布局 } // ... } } } // 创建一个通用的Adapter类 class BaseAdapter(private val dataList: List<Any>) : RecyclerView.Adapter<BaseViewHolder>() { // 根据不同的布局类型,创建不同的ViewHolder override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder { return when (viewType) { TYPE_A -> { // 创建TypeA布局的ViewHolder } TYPE_B -> { // 创建TypeB布局的ViewHolder } // ... else -> { // 创建默认布局的ViewHolder } } } // 根据不同的数据类型,返回不同的布局类型 override fun getItemViewType(position: Int): Int { return when (dataList[position]) { is TypeA -> TYPE_A is TypeB -> TYPE_B // ... else -> DEFAULT_TYPE } } // 绑定数据到ViewHolder override fun onBindViewHolder(holder: BaseViewHolder, position: Int) { holder.bindData(dataList[position]) } // 返回数据列表的大小 override fun getItemCount(): Int { return dataList.size } companion object { // 定义不同的布局类型 private const val TYPE_A = 0 private const val TYPE_B = 1 // ... private const val DEFAULT_TYPE = -1 } } ``` 在上述代码中,我们创建了一个通用的ViewHolder类和一个通用的Adapter类。ViewHolder类中的bindData方法根据不同的数据类型,绑定不同的布局Adapter类中的getItemViewType方法根据不同的数据类型,返回不同的布局类型。在onCreateViewHolder方法中,根据不同的布局类型,创建不同的ViewHolder。在onBindViewHolder方法中,将数据绑定到ViewHolder上。最后,在RecyclerView中设置Adapter即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值