Android listView 中嵌套不同的item
2015-12-02 16:13
204 查看
在listview中嵌套不同的item,就要使用不同的ItmeHolder,根据要显示的不同来保存不同的itemholder (setTag)。
@Override
public int getItemViewType(int position) {}
根据position来返回不同的int数据,从而加载不同的缓存布局
@Override
public int getViewTypeCount() {}
返回一共有多少种缓存布局的数量。
Listview中有3种Item布局,即使convertView缓存了一些布局,但是在重构时,根本不知道怎么样去让convertView返回你所需要的布局,这时你需要让adapter知道我当前有哪些布局,我重构Item时的布局选取规则,好让convertView能返回你需要的布局需要重写一下两个函数
@Override
public int getItemViewType(int position) {}
根据position来返回不同的int数据,从而加载不同的缓存布局
@Override
public int getViewTypeCount() {}
返回一共有多少种缓存布局的数量。
@Override public View getView(int position, View convertView, ViewGroup parent) { //三种itemHolder viewHolder1 holder1 = null; viewHolder2 holder2 = null; viewHolder3 holder3 = null; //根据位置,判断是那种itemholder **int type = getItemViewType(position);** //无convertView,需要new出各个控件 if(convertView == null) { //按当前所需的样式,确定new的布局 switch(type) { case TYPE_1: convertView = inflater.inflate(R.layout.listitem1, parent, false); holder1 = new viewHolder1(); holder1.textView = (TextView)convertView.findViewById(R.id.textview1); holder1.checkBox = (CheckBox)convertView.findViewById(R.id.checkbox); Log.e("convertView = ", "NULL TYPE_1"); convertView.setTag(holder1); break; case TYPE_2: convertView = inflater.inflate(R.layout.listitem2, parent, false); holder2 = new viewHolder2(); holder2.textView = (TextView)convertView.findViewById(R.id.textview2); Log.e("convertView = ", "NULL TYPE_2"); convertView.setTag(holder2); break; case TYPE_3: convertView = inflater.inflate(R.layout.listitem3, parent, false); holder3 = new viewHolder3(); holder3.textView = (TextView)convertView.findViewById(R.id.textview3); holder3.imageView = (ImageView)convertView.findViewById(R.id.imageview); convertView.setTag(holder3); break; } } else { //有convertView,按样式,取得不用的布局 switch(type) { case TYPE_1: holder1 = (viewHolder1) convertView.getTag(); break; case TYPE_2: holder2 = (viewHolder2) convertView.getTag(); break; case TYPE_3: holder3 = (viewHolder3) convertView.getTag(); break; } } //根据不同的type,为各个界面设置资源 switch(type) { case TYPE_1: holder1.textView.setText(Integer.toString(position)); holder1.checkBox.setChecked(true); break; case TYPE_2: holder2.textView.setText(Integer.toString(position)); break; case TYPE_3: holder3.textView.setText(Integer.toString(position)); holder3.imageView.setBackgroundResource(R.drawable.icon); break; } return convertView; }
相关文章推荐
- android studio 2.0安装
- Android IPC 机制【3】--AIDL[1]
- Android第三方开源对话消息提示框:SweetAlertDialog(sweet-alert-dialog)
- Android制作粒子爆炸特效
- android内存优化--Bitmap
- 2015最流行的Android组件、工具、框架大全
- Android 的事件分发机制(一)---view的事件传递
- Android控件之TextView
- 官网 Android Studio下载地址
- Android 44 沉浸式状态栏效果
- Ubuntu下Chromium for Android 源码的编译
- Android之NDK开发
- Android ScrollView向上滑动控件顶部悬浮效果实现
- Ubuntu下编译Chromium for Android
- mtk平台androidl usb uvc camera 调试记录
- Android 增强版百分比布局库 为了适配而扩展
- 解决Android模拟器端口被占用问题的办法
- Android四大组件之ContentProvider
- Android动画_AnimationSet
- android 应用程序间跳转