Android开发学习教程(18)- Android ListView列表控件用法
—— 如果我这样就倒下了,那么我也不过是这种程度的男人罢了。 ——索隆
ListView是什么
ListView是一个可以滑动的列表控件,当我们需要以列表的方式显示数据时,特别是大量的数据时,我们可以使用ListView控件,比如我们常见的通讯录列表、微信聊天列表、朋友圈列表等。
ListView有什么用
ListView用来展示大量的数据列表时具有很好的灵活性和性能,这里需要提到的是,Android还提供了一个更灵活性和更高性能的列表控件RecycleView(这个在后面的篇章会详细说明)。
ListView怎么用
1. ArrayAdapter
ArrayAdapter专门用来显示只有一个TextView的数据列表项。这点可以从ArrayAdapter的源码看出来。这里截取其中一小段说明:
final TextView text; if (mFieldId == 0) { // 如果没有指定显示数据的控件,那就把整个布局view转换成TextView text = (TextView) view; } else { // 如果有指定,那就实例化 text = view.findViewById(mFieldId); }
我们来看ArrayAdapter的具体用法,新建activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="#EEEEEE" android:dividerHeight="1dp" /> </androidx.constraintlayout.widget.ConstraintLayout>
然后在MainActivity中实例化:
ListView listView = (ListView) findViewById(R.id.listview);
实例化了ListView之后给ListView装载数据,即实例化数据适配器Aadapter:
String[] data = {"赵一", "刘二", "张三", "李四", "王五", "赵六", "韩梅梅", "李雷", "小明", "小红", "小张", "小赵", "小刘", "小往", "小韩", "小李", "小孙", "小钱"}; ArrayAdapterarray = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); listView.setAdapter(array);
运行看效果:
2. SimpleAdapter
SimpleAdapter相对于ArrayAdpter展示只有一个TextView的数据列表项多了ImageView的数据列表项。这个看源码也可以看得出。这里截取其中一小段说明:
if (v instanceof TextView) { // Note: keep the instanceof TextView check at the bottom of these // ifs since a lot of views are TextViews (e.g. CheckBoxes). setViewText((TextView) v, text); } else if (v instanceof ImageView) { if (data instanceof Integer) { setViewImage((ImageView) v, (Integer) data); } else { setViewImage((ImageView) v, text); } }
我们来看SimpleAdapter的具体用法,修改MainActivity代码为:
ArrayList
运行效果:
3. 自定义BaseAdaper
自定义BaseAdapter可以展示任意类型的数据列表项,其实上面SimpleAdapter和ArrayAdapter都是继承自BaseAdapter,区别在于getView方法,SimpleAdapter和ArrayAdapter的getView读者可以自行查看源码,基本和上面截取的一小段差不多。我们来看自定义BaseAdapter的用法:
Listlist = new ArrayList<>(); for (int i = 0; i < 20; i++) { list..add("第" + i + "个item"); } listView.setAdapter(new MyAdapter(list));
其中MyAdapter类的代码如下:
class MyAdapter extends BaseAdapter { private ListmList; public MyAdapter(List mList) { this.mList = mList; } @Override public int getCount() { return mList == null ? 0 : mList.size(); } @Override public String getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; //判断是否缓存 if (convertView == null) { holder = new ViewHolder(); //通过LayoutInflater实例化布局 convertView = mInflater.inflate(R.layout.item_listview, null); holder.tvName = (TextView) convertView.findViewById(R.id.tv_name); convertView.setTag(holder); } else { //通过tag找到缓存的布局 holder = (ViewHolder) convertView.getTag(); } //设置布局中控件要显示的视图 holder.tvName.setText(mList.get(position)); return convertView; } public final class ViewHolder { public TextView tvName; } } }
运行效果:
ListView的ViewHolder可复用性
https://blog.csdn.net/u010687392/article/details/45620541
https://blog.csdn.net/guolin_blog/article/details/44996879
本篇源码下载地址:https://pan.baidu.com/s/137i7YMmSBQiWFOxeYLq0bA 提取码: helu
------转载请注明出处,感谢您对原创作者的支持------
有偿提供技术支持、Bug修复、项目外包、毕业设计、大小作业
Android学习小站
Q Q:1095817610
微信:jx-helu
邮箱:1095817610@qq.com
添加请备注"Android学习小站"
