int type = getItemViewType(position);

本文介绍在Android开发中,如何在ListView中实现多种布局效果。通过重写getItemViewType()和getViewTypeCount()方法,在加载时定义每个item的布局类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

listview中有多中布局 需要重写 getitemviewType() getViewTypeCount()  在加载就把每个item布局的类型定义了

转载于:https://www.cnblogs.com/childyngy/p/5469732.html

ackage com.example.noteapp281.adapter; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.example.noteapp281.EditActivity; import com.example.noteapp281.NoteDbOpenHelper; import com.example.noteapp281.R; import com.example.noteapp281.bean.Note; import com.example.noteapp281.util.ToastUtil; import java.util.List; public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<Note> mBeanList; private LayoutInflater mLayoutInflater; private Context mContext; private NoteDbOpenHelper mNoteDbOpenHelper; private int viewType; public static int TYPE_LINEAR_LAYOUT = 0; public static int TYPE_GRID_LAYOUT = 1; public MyAdapter(Context context, List<Note> mBeanList) { this.mBeanList = mBeanList; this.mContext = context; mLayoutInflater = LayoutInflater.from(mContext); mNoteDbOpenHelper = new NoteDbOpenHelper(mContext); } public void setViewType(int viewType) { this.viewType = viewType; } @Override public int getItemViewType(int position) { return viewType; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = null; if (viewType == TYPE_LINEAR_LAYOUT) { view = mLayoutInflater.inflate(R.layout.list_item_layout, parent, false); MyViewHolder myViewHolder = new MyViewHolder(view); return myViewHolder; } else if (viewType == TYPE_GRID_LAYOUT) { view = mLayoutInflater.inflate(R.layout.list_item_grid_layout, parent, false); MyGridViewHolder myGridViewHolder = new MyGridViewHolder(view); return myGridViewHolder; }else { return null;
06-08
在我山面发给你的文件里改,例如在tpye1里有一个btn_test的button,设置这个button的监听,这个按钮被按下时,使用Toast输出,发给我完整的kotlin文件,在我基础之上修改,注明修改内容 package com.app.decodemo import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.Toast import androidx.recyclerview.widget.RecyclerView import com.app.deco.R class HomePageMultiTypeAdapter( private val items: List<HomePageDataItem>, private val onClickListener: (HomePageDataItem) -> Unit ) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { companion object { private const val TYPE_1 = 1 private const val TYPE_2 = 2 private const val TYPE_3 = 3 private const val TYPE_4 = 4 } override fun getItemViewType(position: Int): Int { return when (items[position]) { is HomePageDataItem.Type1 -> TYPE_1 is HomePageDataItem.Type2 -> TYPE_2 is HomePageDataItem.Type3 -> TYPE_3 is HomePageDataItem.Type4 -> TYPE_4 } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { TYPE_1 -> Type1ViewHolder( LayoutInflater.from(parent.context) .inflate(R.layout.layout_homepage_item1, parent, false) ) TYPE_2 -> Type2ViewHolder( LayoutInflater.from(parent.context) .inflate(R.layout.layout_homepage_item2, parent, false) ) TYPE_3 -> Type3ViewHolder( LayoutInflater.from(parent.context) .inflate(R.layout.layout_homepage_item3, parent, false) ) TYPE_4 -> Type4ViewHolder( LayoutInflater.from(parent.context) .inflate(R.layout.layout_homepage_item4, parent, false) ) else -> throw IllegalArgumentException("Invalid view type") } } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { is Type1ViewHolder -> holder.bind(items[position] as HomePageDataItem.Type1, onClickListener) is Type2ViewHolder -> holder.bind(items[position] as HomePageDataItem.Type2, onClickListener) is Type3ViewHolder -> holder.bind(items[position] as HomePageDataItem.Type3, onClickListener) is Type4ViewHolder -> holder.bind(items[position] as HomePageDataItem.Type4, onClickListener) } } override fun getItemCount() = items.size // 四种不同的 ViewHolder inner class Type1ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(item: HomePageDataItem.Type1, onClickListener: (HomePageDataItem) -> Unit) { itemView.setOnClickListener { onClickListener(item) } } } inner class Type2ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(item: HomePageDataItem.Type2, onClickListener: (HomePageDataItem) -> Unit) { itemView.setOnClickListener { onClickListener(item) } } } inner class Type3ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(item: HomePageDataItem.Type3, onClickListener: (HomePageDataItem) -> Unit) { itemView.setOnClickListener { onClickListener(item) } } } inner class Type4ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(item: HomePageDataItem.Type4, onClickListener: (HomePageDataItem) -> Unit) { itemView.setOnClickListener { onClickListener(item) } } } }
最新发布
08-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值