实现listview的一般步骤
1.在布局文件中添加xml代码
-添加ListView标签
2.在activity中编写java代码
-获取ListView对象
-准备数据源
-配置适配器
-将适配器关联到ListView
使用ArrayAdapter实现文字列表
1.在布局文件中编写代码(xml)
-添加ListView标签(main.xml)
2.在activity中编写代码(java)
-获取ListView对象
-准备数据源(Array数组)
-配置适配器(ArrayAdapter)
-将适配器关联到ListView
<?xml version="1.0" encoding="utf-8"?>
<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="match_parent"
tools:context="com.yuanwang.test33.MainActivity">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lv"
android:layout_alignParentTop="true" />
</RelativeLayout>
listView = (ListView) findViewById(lv);
String[] item = {"1", "2", "3"};
ArrayAdapter<String> adapter=new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_list_item_1,
item
);
listView.setAdapter(adapter);
什么是适配器
为什么要使用适配器?
Adapter实际是一个设计模式,设计模式是什么,就是一种编程经验,编程经验丰富的人觉得程序这么写,会有更好的效果。它就是视图/代码分开的模式。数据--适配器--视图。它是桥梁。它是负责把我们的数据显示到视图。
使用SimpleAdapter实现图文混编列表
1.在布局文件中编写代码
-添加ListView标签(main.xml)
-编写行布局文件(item.xml) 每一个控件都需要ID
2.在Activity中编写代码
-获取ListView对象
-准备数据源(List<Map>) 泛型
-配置适配器(SimpleAdapter)
-将适配器关联到ListView
-编写行布局文件(item.xml) 每一个控件都需要ID
listview_item.xml<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/imageViewHeader"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="content"
android:id="@+id/textViewContent"
android:layout_above="@+id/textViewTime"
android:layout_toRightOf="@+id/imageViewHeader"
android:layout_toEndOf="@+id/imageViewHeader" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="time"
android:id="@+id/textViewTime"
android:layout_alignBottom="@+id/imageViewHeader"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
private ListView listView;
private int[] ivID={R.drawable.a3i,R.drawable.a3j,R.drawable.a3k,R.drawable.a3l,
R.drawable.a3m,R.drawable.a3o,R.drawable.a3p,R.drawable.a3r,
R.drawable.a3s};
private String[] content={"fgsdgsdf","adsfasdfasd","adsfsadf","asdfadsf",
"45254245","5354242","7254245","24524287",
"2312fdf"};
private String[] time = {"1","2","3","4","5","6","7","8","9"};
listView = (ListView) findViewById(lv);
List<Map<String, Object>> maplist = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
list = new ArrayList<>();
for (int i = 0; i < 9; i++) {
map = new HashMap<>();
map.put("imageViewHeader", ivID[i]);
map.put("textViewContent", content[i]);
map.put("textViewTime", time[i]);
list.add(map);
}
SimpleAdapter adapter=new SimpleAdapter(
MainActivity.this,
maplist,
R.layout.listview_item,
new String[]{"imageViewHeader","textViewContent","textViewTime"},
new int[]{R.id.imageViewHeader,R.id.textViewContent,R.id.textViewTime}
);
listView.setAdapter(adapter);
当你的行布局中有button的时候,会发现运行到手机,点击listview点不了咯。为什么呢?因为button把listview的焦点抢了。所以接下要做的事,是把焦点抢回来。那么怎么抢呢?有个小技巧。
需要在行布局最外父类容器中设置descendantFocusability属性。
android:descendantFocusability=”blocksDescendants”