ListView 显示多种itemView布局的简单实现
2015-03-10 15:03
411 查看
参考:http://blog.csdn.net/bill_ming/article/details/8817172
需要了解的知识点:ViewHolder的作用
convertView是什么
getItemViewType方法
这些知识点可以百度搜索,多看一些人的解释。
实例图如下:
在一个listView中,每行显示一个Item。其中有两种布局格式,一个是只含有一个TextView的,一种是含有两个TextView的。例子很简单。
代码部分:
1、完成三种布局
左边的:
<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="wrap_content" > <TextView android:id="@+id/il_tv_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:text="XXXXXXXXXXX"/> </RelativeLayout>中间的
<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="wrap_content" > <TextView android:id="@+id/il_tv_middle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="XXXXXXXXXXX"/> <TextView android:id="@+id/il_tv_tip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toLeftOf="@+id/il_tv_middle" android:textColor="#C0FF3E" android:textStyle="bold" android:text="show" /> </RelativeLayout>右边的
<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="wrap_content" > <TextView android:id="@+id/il_tv_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="XXXXXXXXXXX"/> </RelativeLayout>
2、编写Item类
每个Item有两个属性,一个是显示的字,一个是所属类型,这里的类型是所处位置
public class StringItem { private String txt; private Type type; public StringItem(String txt,Type type) { this.txt = txt; this.type = type; } public String getTxt() { return txt; } public void setTxt(String txt) { this.txt = txt; } public Type getType() { return type; } public void setType(Type type) { this.type = type; } public enum Type{ LEFT,MIDDLE,RIGHT } }
3、实现适配器的编写
public class StringAdapter extends BaseAdapter { private List<StringItem> datasItems; private LayoutInflater mInflater; private Context mContext; public StringAdapter(Context mContext,List<StringItem> datas) { this.mContext = mContext; this.datasItems = datas; mInflater = LayoutInflater.from(mContext); } @Override public int getItemViewType(int position) { if (datasItems.get(position).getType() == Type.LEFT) { return 0; } else if (datasItems.get(position).getType() == Type.MIDDLE) { return 1; } else { return 2; } } @Override public int getCount() { return datasItems.size(); } @Override public Object getItem(int position) { return datasItems.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; ViewHolderMore viewHolderMore = null; int type = getItemViewType(position); //如果没有convertView,new出控件 if(convertView == null ){ if(getItemViewType(position) == 0){ convertView = mInflater.inflate(R.layout.item_left, parent,false); viewHolder = new ViewHolder(); viewHolder.textView = (TextView)convertView.findViewById(R.id.il_tv_left); convertView.setTag(viewHolder); }else if(getItemViewType(position)==1){ convertView = mInflater.inflate(R.layout.item_middle, parent,false); viewHolderMore = new ViewHolderMore(); viewHolderMore.textView = (TextView)convertView.findViewById(R.id.il_tv_middle); viewHolderMore.showTV = (TextView)convertView.findViewById(R.id.il_tv_tip); convertView.setTag(viewHolderMore); }else { convertView = mInflater.inflate(R.layout.item_right, parent,false); viewHolder = new ViewHolder(); viewHolder.textView = (TextView)convertView.findViewById(R.id.il_tv_right); convertView.setTag(viewHolder); } //如果有convertView,按照样式取得不同的布局 }else{ if(getItemViewType(position) == 0 || getItemViewType(position)==2){ viewHolder = (ViewHolder)convertView.getTag(); try { Log.e("", "getView方法中-------->:(ViewHolder)convertView.getTag()为:" + (ViewHolder)convertView.getTag()); } catch (Exception e) { e.printStackTrace(); } }else{ viewHolderMore = (ViewHolderMore)convertView.getTag(); } } //根据类型设置显示 switch (type) { case 0: viewHolder.textView.setText(datasItems.get(position).getTxt()); break; case 1: viewHolderMore.textView.setText(datasItems.get(position).getTxt()); viewHolderMore.showTV.setText("SHOW:"); break; case 2: viewHolder.textView.setText(datasItems.get(position).getTxt()); break; default: break; } return convertView; } public static class ViewHolder{ TextView textView; } public static class ViewHolderMore{ TextView textView; TextView showTV; } }4、页面调用
public class MainActivity extends ListActivity { private LayoutInflater mLayoutInflater = null; private StringAdapter adapter; private List<StringItem> mDatas = new ArrayList<StringItem>(); private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLayoutInflater = LayoutInflater.from(this);//初始化界面 mContext = this; initData(); adapter = new StringAdapter(mContext,mDatas);//初始化适配器,并为其赋值 setListAdapter(adapter);//设置适配器 } //初始化显示在ListView中的数据 private void initData() { StringItem item= null; for(int i = 0;i<20;i++){ if(i%3==0){ item = new StringItem("No"+i, Type.LEFT); }else if(i%3==1){ item = new StringItem("Mid"+i, Type.MIDDLE); }else{ item = new StringItem("Last"+i, Type.RIGHT); } mDatas.add(item); } } }
相关文章推荐
- ListView具有多种item布局——实现微信对话列 .
- android listView的item 显示多种不同的布局
- ListView和BaseAdapter的getViewTypeCount和getItemViewType方法实现Gridview,显示多列
- ListView具有多种item布局——实现微信对话列
- ListView具有多种item布局——实现微信对话列
- ListView具有多种item布局——实现微信对话列
- Android ListView Adapter的getItemViewType和getViewTypeCount多种布局
- android listview多种布局 getViewTypeCount和getItemViewType
- Android中ListView多种Item布局的实现
- ListView具有多种item布局——实现微信对话列
- ListView具有多种item布局——实现微信对话列 .
- ListView具有多种item布局——实现微信对话列 推荐
- ListView具有多种item布局——实现微信对话列
- Android_ListView 用多样式item实现复杂布局显示
- ListView具有多种item布局——实现微信对话列
- 使用ListView进行不同布局ItemView的显示
- ListView具有多种item布局——实现微信对话列
- ListView具有多种item布局——实现微信对话列
- ListView实现多种item布局的方法和注意事项
- BaseAdapter-ListView中的item显示多种布局