最近做一个black ant的温控系统项目,里面有很多列表项,但是用的时候,感觉封装的已经挺好的了,自己拿过来改改代码就行了,所以用过之后也没什么感觉。现在趁着闲暇时间整理下简单的ListView,体会下这个东西到底是怎么个原理。
首先看下实现效果:
其中,每一条列表项加的是一个Image跟一个TextView,数据源绑定在了TextView上面。
首先,添加两个layout文件:
列表(item)的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="lhc"
/>
</LinearLayout>
接着是整个Activity的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
接着是Activity的代码:
public class ListDemo extends Activity{
private String[] names;//模拟数据源
private ArrayList<HashMap<String,String>> listItem;//需求的数据结构
private ListView mListView;//列表对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_activity);
initCtrl();//初始化组件
mListView.setOnItemClickListener((OnItemClickListener)new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Toast.makeText(getBaseContext(), "您选择了 :"+names[arg2], Toast.LENGTH_LONG).show();
}
});
}
/*初始化组件*/
private void initCtrl() {
mListView=(ListView)findViewById(R.id.lv);//获得listView对象
listItem=loadData();//加载数据
SimpleAdapter listItemAdapter=new SimpleAdapter(getBaseContext(),/*指明了SimpleAdapter关联的View的运行环境,也就是当前的Activity*/
listItem,/*由Map组成的List,在List中的每条目对应ListView的一行,每一个Map中包含的就是所有在from参数中指定的key*/
R.layout.listview_item,/*定义列表项的布局文件的资源ID,该资源文件至少应该包含在to参数中定义的ID*/
new String[]{"ItemName"},/*将被添加到Map映射上的Key*/
new int[] {R.id.name}/*将绑定数据的视图的Id跟from参数对应,这些被绑定的视图元素应该全是TextView*/
);
//设置适配器
mListView.setAdapter(listItemAdapter);
}
/*模拟获取数据源过程*/
private ArrayList<HashMap<String, String>> loadData() {
names=new String[]{"can","pppbc","pbc","lhc","can","小火山"};
listItem=new ArrayList<HashMap<String,String>>();
//遍历数组
for(int i=0;i<names.length;i++){
HashMap<String,String> map=new HashMap<String,String>();
String name=names[i];
map.put("ItemName", name);//以键值对的形式保存
listItem.add(map);//将HashMap添加到list中
}
return listItem;
}
}