ListView 加载多种不同的item
来源:互联网 发布:mysql持久化是什么 编辑:程序博客网 时间:2024/06/05 02:54
在android 开发中使用listview是很常见的,我们常常使用的是加载一种布局,当需要几种不同的布局的时候,开始的时候都是用Visiable 和 Gone 来显示和隐藏来展示。
其实android 也提供了一个api 就是继承BaseAdapter的时候 多重写2个方法:
@Overridepublic int getItemViewType(int position) {return super.getItemViewType(position);}@Overridepublic int getViewTypeCount() {return super.getViewTypeCount();}
用来记录不同的view类型,getItemViewType 方法返回值最好是从0开始。 getViewTypeCount 返回值 是不能布局的个数。
话不多说看代码:
我这里加载了三种布局,数据50条;
//数据实体
public class Data implements Serializable {private static final long serialVersionUID = 1L;public int type;public String Text;public Bitmap icon;}
布局:acivity_main.xml
<LinearLayout 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" android:orientation="vertical" ><ListView android:id="@+id/lv_list" android:layout_width="match_parent" android:layout_height="match_parent" android:focusableInTouchMode="false" /></LinearLayout>
item01.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv_item01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是一种独立的布局1"/></LinearLayout>
item02.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/iv_img02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ic_launcher"/><TextView android:id="@+id/tv_item02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是一种独立的布局2"/></LinearLayout>
item03.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/tv_item03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是一种独立的布局3"/><ImageView android:id="@+id/iv_img01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ic_launcher"/></LinearLayout>
MyAdater.java
class MyAdapter extends BaseAdapter{LayoutInflater mInflater;private List<Data> datas;private Context context;public MyAdapter(Context context,List<Data> datas) {//mInflater = LayoutInflater.from(context);this.datas = datas;Log.e("peng", "adapter size:"+datas.size());this.context = context;}@Overridepublic int getCount() {return datas.size();}@Overridepublic long getItemId(int position) {return position;}/** * 返回那种类型 */@Overridepublic int getItemViewType(int position) {Data data = datas.get(position);return data.type;}/** * 有几种view类型 */@Overridepublic int getViewTypeCount() {return 3;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Holder_text holder1 = null;Holderimg_text holder2 = null ;Holder_img holder3 = null;int type = getItemViewType(position);if(convertView == null){if(type ==1){Log.e("peng", "1");holder1 = new Holder_text();convertView = View.inflate(context,R.layout.item01, null);holder1.text = (TextView) convertView.findViewById(R.id.tv_item01);convertView.setTag(holder1);}else if(type == 2) {Log.e("peng", "2");holder2 = new Holderimg_text();convertView = View.inflate(context,R.layout.item02, null);holder2.text = (TextView) convertView.findViewById(R.id.tv_item02);holder2.img = (ImageView) convertView.findViewById(R.id.iv_img02);convertView.setTag(holder2);}else{Log.e("peng", "3");holder3 = new Holder_img();convertView = View.inflate(context,R.layout.item03, null);holder3.img = (ImageView) convertView.findViewById(R.id.iv_img01);holder3.text = (TextView) convertView.findViewById(R.id.tv_item03);convertView.setTag(holder3);}}else {if(type == 1){holder1 = (Holder_text) convertView.getTag();holder1.text.setText(datas.get(position).Text+"type:"+datas.get(position).type);}else if(type == 2){holder2 = (Holderimg_text) convertView.getTag();holder2.text.setText(datas.get(position).Text+"type:"+datas.get(position).type);}else {holder3 = (Holder_img) convertView.getTag();holder3.text.setText(datas.get(position).Text+"type:"+datas.get(position).type);}}return convertView;}public final class Holderimg_text{public TextView text;public ImageView img;}public final class Holder_text{public TextView text;}public final class Holder_img{public ImageView img;public TextView text;}@Overridepublic Object getItem(int position) {return datas.get(position);}}MainActivity.java
public class MainActivity extends Activity {private ListView lv_list;private MyAdapter adapter;private List<Data>list = new ArrayList<Data>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);data();Log.e("peng","size"+list.size());initView();}private void data() {for(int i = 0;i<50;i++){Data d = new Data();if((i%3)==0){d.type = 0;}else if((i%3)==1){d.type = 1;}else{d.type = 2;}d.Text = "这是第"+i+"个";list.add(d);}}private void initView() {lv_list = (ListView) findViewById(R.id.lv_list);adapter = new MyAdapter(MainActivity.this,list);lv_list.setAdapter(adapter);}}这样 就完成了ListView加载不同的三种布局。
0 0
- ListView 加载多种不同的item
- ListView 多种Item的加载
- 关于listview加载多种item的解决方案
- ListView的不同item加载不同Layout
- ListView的不同item加载不同Layout
- Android ListView加载不同的item
- 加载listview里面不同样式的item
- ListView item加载不同的布局
- Android ListView加载不同的item
- ListView加载不同Item布局的问题
- android listView的item 显示多种不同的布局
- Android listView同时展示多种不同数据的item
- listView 加载不同布局item
- ListView里item加载多种布局文件
- android listview 加载多种不同视图的条目
- android listview item 加载不同的布局样式文件
- listview加载不同的item并实现holder优化
- Android ListView加载两种不同的item
- PL/SQL Developer如何连接64位的Oracle图解
- shell简介
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 1、Spring MVC 介绍
- 凸优化
- ListView 加载多种不同的item
- java web中jsp与servlet之间的跳转和传递参数
- 从0x7c00开始的16位汇编(菜鸟文章)
- eclipse远程调试
- 去掉已有top值
- [知其然不知其所以然-29] Keep system as idle as possible
- Swift ☞ UITableView(一)
- WEB服务器、应用程序服务器、HTTP服务器区别
- 程序员遇到问题时怎么办