ListView不同布局的item的复用方法详解
来源:互联网 发布:浦东国税局 知乎 编辑:程序博客网 时间:2024/06/04 20:45
废话不多说,直接上代码简介。
一、MainActivity和布局
public class HomeActivity extends Activity {@Bind(R.id.lv)ListView lv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_home);ButterKnife.bind(this);lv.setAdapter(new ListViewAdapter(this));}}<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:divider="#ff7A4299" android:dividerHeight="1px" /></RelativeLayout>
二、ListViewAdapter(适配器)
public class ListViewAdapter extends BaseAdapter {private final static String[] TITLE = { "個人資料", "活動記錄", "打卡", "投票", "現場抽獎", "購物車", "購買記錄", "登出" };private final static int[] ICON = { R.drawable.ico_12, R.drawable.ico_13, R.drawable.ico_14, R.drawable.ico_15,R.drawable.ico_16, R.drawable.ico_17, R.drawable.ico_18, R.drawable.ico_19 };private Context context;public ListViewAdapter(Context context) {super();this.context = context;}@Overridepublic int getCount() {return TITLE.length * 5;}@Overridepublic Object getItem(int position) {return TITLE[position % TITLE.length];}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder vh = null;// TITLE.length 等于8,总共有40个item。// 我们前20个用R.layout.item_listview,后20个用R.layout.item2_listviewif (position < 20) {// 要复用,这里就要做文章了// 这里,我们R.layout.item_listview泵出来,convertView =// View.inflate(context, R.layout.item_listview, null);// convertView这时是item第一种布局,我们知道它是LinearLayout,我们完全可以自定义一个Item1LinearLayout继承LinearLayout// 用Item1LinearLayout替代R.layout.item_listview里面的根布局LinearLayout// 这时,我们复用时,在判断convertView是否是Item1LinearLayout或者是它的子类就行了if (convertView != null && convertView instanceof Item1LinearLayout) {vh = (ViewHolder) convertView.getTag();} else {// 这里convertView==null 或者 convertView不是Item1LinearLayout不能复用// 重新泵布局1、R.layout.item_listviewconvertView = View.inflate(context, R.layout.item_listview, null);// 避免重复new对象ViewHolderif (vh == null) {vh = new ViewHolder();}vh.iconIv = (ImageView) convertView.findViewById(R.id.icon);vh.titleTv = (TextView) convertView.findViewById(R.id.title);convertView.setTag(vh);}vh.titleTv.setText(TITLE[position % TITLE.length]);vh.iconIv.setImageResource(ICON[position % TITLE.length]);} else {// 同上// 用Item2LinearLayout替代R.layout.item2_listview里面的根布局LinearLayout// 这时,我们复用时,在判断convertView是否是Item2LinearLayout或者是它的子类就行了if (convertView != null && convertView instanceof Item2LinearLayout) {vh = (ViewHolder) convertView.getTag();} else {// 这里convertView==null 或者 convertView不是Item2LinearLayout不能复用// 重新泵布2、R.layout.item2_listviewconvertView = View.inflate(context, R.layout.item2_listview, null);// 避免重复new对象ViewHolderif (vh == null) {vh = new ViewHolder();}vh.titleTv = (TextView) convertView.findViewById(R.id.title);convertView.setTag(vh);}vh.titleTv.setText(TITLE[position % TITLE.length]);}return convertView;}class ViewHolder {private ImageView iconIv;private TextView titleTv;}}
1.R.layout.item_listview<com.example.picassso.view.Item1LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingBottom="12dp" android:paddingTop="12dp" > <ImageView android:id="@+id/icon" android:layout_width="30dp" android:layout_height="30dp" android:layout_gravity="center_vertical" android:layout_marginLeft="10dp" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="15dp" android:text="個人資料" android:textColor="#6000" android:textSize="18sp" /></com.example.picassso.view.Item1LinearLayout>2.R.layout.item2_listview<com.example.picassso.view.Item2LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingBottom="12dp" android:paddingTop="12dp" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="15dp" android:text="個人資料" android:textColor="#f00" android:textSize="18sp" /></com.example.picassso.view.Item2LinearLayout>3.Item1LinearLayout和Item2LinearLayoutpublic class Item1LinearLayout extends LinearLayout {public Item1LinearLayout(Context context) {super(context);// TODO Auto-generated constructor stub}public Item1LinearLayout(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public Item1LinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);// TODO Auto-generated constructor stub}}public class Item2LinearLayout extends LinearLayout {public Item2LinearLayout(Context context) {super(context);// TODO Auto-generated constructor stub}public Item2LinearLayout(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public Item2LinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);// TODO Auto-generated constructor stub}}
复用item就是这么个原理
1 0
- ListView不同布局的item的复用方法详解
- ListView的添加不同布局的item,缓存处理方法
- listview不同的项目布局(item layout)
- ListView的每个Item都不同布局
- 实现listView的不同布局item
- ListView item加载不同的布局
- ListView加载不同Item布局的问题
- listView的item显示不同布局
- ListView中item的不同布局
- ListView实现不同的Item布局
- listview多个不同的item布局
- Android ListView不同的item布局实现
- ListView不同Item的适配详解
- Android为ListView的Item设置不同的布局
- Android为ListView的Item设置不同的布局
- ListView不同的项目布局(item layout)的实现
- android listView的item 显示多种不同的布局
- Android为ListView的Item设置不同的布局
- [Epub]-数字出版物制作-网页版-[2]
- 2016年腾讯校园招聘试题解析
- [javase学习笔记]-2.5 进制扫盲
- Valid Parentheses
- Call can throw but it is not marked with try
- ListView不同布局的item的复用方法详解
- 程序日志
- listview不能刷新显示数据(有数据的情形下)
- ubuntu 数据库无法正常启动
- Swift学习笔记 -- 函数和闭包
- 自己用过的linux命令
- 图片加载显示loading图的疑惑解决
- oracle sqldr命令使用 sqldr导入中文乱码问题
- Divide Two Integers