ListView 是Android中最常用的一种视图组件。以垂直的方式列表需要显示的列表项。在Android中我们通过两种方式来实现ListView,一种是直接使用ListView组件,一种是让Activity继承ListActivity。
ListView中的一些常用属性
- android:divider 设置列表的分隔条,可以是颜色 也可以是Drawable资源
- android:dividerHeight 设置分隔条的高度
- android:entries 用于通过数组资源为ListView 指定内容
- android:HeaderDividersEnabled 设置是否在header View 之后绘制分隔条,默认为true。
- android:footerDividersEnabled 设置是否在footerView 之前绘制分隔条,默认为true。
实现ListView组件
通过指定数组资源来实现ListView
我们先在XML中定义我们的ListView
<ListView
android:layout_width="match_parent"
android:id="@+id/lv_my_test"
android:entries="@array/myData"
android:layout_height="match_parent"/>
我们引用的我们写的数组里面的数据,我们在values文件夹下创建一个arrays.xml 里面的代码为
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="myData">
<item>这是第一个</item>
<item>这是第二个</item>
<item>这是第三个</item>
<item>这是第四个</item>
<item>这是第五个</item>
<item>这是第六个</item>
<item>这是第七个</item>
<item>这是第八个</item>
<item>这是第九个</item>
</string-array>
</resources>
这样一个最简单的ListView 就已经写好了,在Activiity中完全不用写什么其他代码,但是这样的ListView并没什么卵用!!
当然可能有时候就需要一个特别简单的来展示一点数组这样也可以。更多的时候我们会通过Adapter去适配数据。
通过ArrayAdapter来展示ListView
删掉ListView的xml代码中的 android:entries="@array/myData",我们看看java里面的代码和效果图。
public class TestActivity extends Activity {
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
initViews();
}
private void initViews() {
String[] data = new String[]{
"刘亦菲", "李宇春", "王尼玛", "金星", "其他"};//创建一个数组
mListView = (ListView) findViewById(R.id.lv_my_test);//初始化ListView
//初始化ArrayAdapter 适配器
ArrayAdapter<String> mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data);//【注1】
mListView.setAdapter(mAdapter);//将适配器设置给ListView
}
}
注1: 我们为ArrayAdapter设置的三个参数分别为 上下文、item的布局,我们的数据。
我们用了系统给我们提供好的简单的布局,那么系统给我们都提供了些什么简单的item布局呢?
常用的有以下几种:
1. simple_list_item_1 每个列表项都是一个普通文本
2. simple_list_item_2 每个列表项都是双行显示
3. simple_list_item_checked 每个列表项全部都是选中的状态 并且不可取消选中
4. simple_list_item_multiple_choice 每个列表项都是带checkbox的文本
5. simple_list_item_single_choice 每个列表项都是带单选按钮的文本
simple_list_item_2 的实现
用上面ArrayAdapter不能实现simple_list_item_2 的布局。
这时候我们要用SimpleAdapter来实现。
只需要替换上班的initViews()方法里面的代码
List<Map<String, String>> data = new ArrayList<>();
Map<String, String> map1 = new HashMap<>();
map1.put("name", "刘亦菲");
map1.put("sex", "女");
Map<String, String> map2 = new HashMap<>();
map2.put("name", "李宇春");
map2.put("sex", "男");
Map<String, String> map3 = new HashMap<>();
map3.put("name", "王尼玛");