Android 简单的BaseListAdapter封装+巧用ListView加载不同布局文件
来源:互联网 发布:若非吾故人乎翻译 编辑:程序博客网 时间:2024/06/06 17:07
先上代码:撸一个简单的BaseListAdapter类:
/** * Created by ekikousei易皇星 on 17/2/22. * E-mail:13764664731@163.com * Signature:缘分是本书,翻的不经意会错过,读的太认真会流泪!! * <p> * TODO:类描述: */public abstract class BaseListAdapter<T> extends BaseAdapter { protected List<T> mTList=new ArrayList<>(); protected Context mContext; protected LayoutInflater mInflater; public BaseListAdapter(Context mContext,List<T> mTList) { this.mContext=mContext; this.mTList=mTList; mInflater= LayoutInflater.from(mContext); } @Override public int getCount() { return mTList.size(); } @Override public T getItem(int i) { return (T)mTList.get(i); } @Override public long getItemId(int i) { return i; } public void clearAll() { mTList.clear(); } public List<T> getData(){ return mTList; } public void addAll(List<T> lists){ if(null==lists || lists.size()==0){ return; }else { notifyDataSetChanged(); } } public void add(T item){ mTList.add(item); notifyDataSetChanged(); } public void removeEntity(T item){ mTList.remove(item); }}
第二步:巧用getItemViewType加载不同布局
/** * Created by ekikousei易皇星 on 17/2/22. * E-mail:13764664731@163.com * Signature:缘分是本书,翻的不经意会错过,读的太认真会流泪!! * <p> * TODO:类描述: */public class ListAdapter extends BaseListAdapter<ItemInfo> { private static final int TYPE_COUNT = 2;//item类型的总数 private static final int TYPE_COMSUM = 0;//男类型 private static final int TYPE_CHARGE = 1;//女类型 private List<ItemInfo> mTList; /** 之类继承父类,一定要实现父类的构造方法,否则出现: There is no default constructor available */ public ListAdapter(Context mContext, List<ItemInfo> mTList) { super(mContext, mTList); this.mTList=mTList; } @Override public int getItemViewType(int position) { if("0".equals(mTList.get(position).getType())){ return TYPE_COMSUM; }else if("1".equals(mTList.get(position).getType())){ return TYPE_CHARGE; } return 0; } @Override public int getViewTypeCount() { return TYPE_COUNT; } @Override public View getView(int i, View view, ViewGroup viewGroup) { int type= getItemViewType(i); if(type==TYPE_COMSUM){ view= mInflater.inflate(R.layout.listview_item,null); TextView tvname= (TextView) view.findViewById(R.id.name); TextView tvsex= (TextView) view.findViewById(R.id.sex); tvname.setText(mTList.get(i).getName()); tvsex.setText(mTList.get(i).getSex()); return view; }else if(type==TYPE_CHARGE){ view= mInflater.inflate(R.layout.listview_item_other,null); TextView tvname= (TextView) view.findViewById(R.id.name); TextView tvsex= (TextView) view.findViewById(R.id.sex); tvname.setText(mTList.get(i).getName()); tvsex.setText(mTList.get(i).getSex()); return view; } return null; }}
在上面的getView()方法里面,根据getItemViewType()来加载item所需要的布局文件
item布局文件:listview_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="item"/> <TextView android:layout_marginTop="16dp" android:id="@+id/sex" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="item"/></LinearLayout>
在listAdapter的getview() 中还有一个item布局文件listview_item_other.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">\ <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="item"/> <TextView android:id="@+id/sex" android:layout_marginTop="15dp" android:gravity="right" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="item"/></LinearLayout>
搞定listAdapter,查不到就完事了
public class MainActivity extends AppCompatActivity { private List<ItemInfo> list=new ArrayList<>(); private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview= (ListView) findViewById(R.id.listview); for (int i = 0; i <100 ; i++) { if(i%2==0){ ItemInfo info=new ItemInfo(); info.setName("item"+i); info.setSex("男"+i); info.setType("0"); list.add(info); }else { ItemInfo info=new ItemInfo(); info.setName("item"+i); info.setSex("女"+i); info.setType("1"); list.add(info); } } ListAdapter mlistadapter=new ListAdapter(MainActivity.this,list); listview.setAdapter(mlistadapter); }}
效果图:
0 0
- Android 简单的BaseListAdapter封装+巧用ListView加载不同布局文件
- android listview item 加载不同的布局样式文件
- Android listview 加载不同的布局实现
- android ListView加载不同布局
- android ListView加载不同布局
- Android Listview加载不同布局
- 12,对ListView的适配器的封装BaseListAdapter
- ListView加载不同的布局
- listView加载不同布局
- ListView加载不同布局
- ListView加载不同布局
- Listview加载不同布局
- listview加载不同布局
- ListView 加载不同布局
- ListView item加载不同的布局
- ListView加载不同Item布局的问题
- Android ListView使用不同对象加载不同布局
- Android RecyclerView加载不同布局简单实现
- 为什么要在eclipse中安装hadoop-eclipse-plugins插件?
- Bootstrap 3
- JS计算两个日期之间相差的年份
- (UART与COM)
- 判断循环队列满
- Android 简单的BaseListAdapter封装+巧用ListView加载不同布局文件
- 协程简介
- iOS自定义转场动画实战讲解
- mysql比较时间
- 【mysql】mac下mysql安装及配置
- 模糊C均值聚类原理
- 蓝桥杯 算法训练 摆动序列
- BZOJ 1823 [JSOI2010]满汉全席 2-SAT
- js的 new image()做图片预加载