07 - 基本控件:ListView 列表
来源:互联网 发布:动态图截取软件 编辑:程序博客网 时间:2024/04/30 20:19
转载注明出处:http://blog.csdn.net/eana_don/article/details/8290428
界面如下:
在代码中,则是这么写的:
参考资料:《疯狂Android讲义》,官网API
列表视图是一种很常运用的的组件,以垂直的形式展示所有的列表项。创建列表视图有两种方法,一种是直接使用ListView,一种是让Activity继承ListActivity。
对于两种方法,创建ListView的方法都是一样的,而且有很多种,可根据需要选择使用哪种Adapter。
首先,基本页面的布局如下:
三个按钮分别对应三种创建ListView的方法。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center_horizontal"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <Button android:id="@+id/btn_1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ArrayAdapter创建列表"/> <Button android:id="@+id/btn_2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="SimpleAdapter创建列表"/> <Button android:id="@+id/btn_3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="自定义BaseAdapter创建列表"/> </LinearLayout> <!-- 使用ArrayAdapter包装数组 --> <ListView android:id="@+id/listview2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:fadeScrollbars="true" android:divider="@drawable/devider_03" android:listSelector="@android:color/transparent" ></ListView> <!-- android:listSelector去除点击时产生的系统背景色 --> <!-- android:cacheColorHint去除listView 按下拖动时出现的黑色背景--> <!-- android:divider 设置分割线 --></LinearLayout>
按钮对应的监听事件如下:
private Button btn1 = null;private Button btn2 = null;private Button btn3 = null;ListView listview = null;List<Map<String, String>> adpterData = new ArrayList<Map<String,String>>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_view); listview = (ListView)findViewById(R.id.listview2); btn1 = (Button) findViewById(R.id.btn_1); btn1.setOnClickListener(new Btn1Listener()); btn2 = (Button) findViewById(R.id.btn_2); btn2.setOnClickListener(new Btn2Listener()); btn3 = (Button) findViewById(R.id.btn_3); btn3.setOnClickListener(new Btn3Listener()); //初始化数据 for(int i = 0 ;i < 10 ;i++){Map<String,String> map = new HashMap<String, String>();map.put("name", "用户" + i);map.put("id", "id:"+i);adpterData.add(map);} }
界面如下:
一、使用ArrayAdapter形成ListView
class Btn1Listener implements OnClickListener{ //ArrayAdapter创建列表@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString[] language = new String[]{"好","哈喽","开学","放学","下班",};ArrayAdapter<String> adapter = new ArrayAdapter<String>( ListViewActivity.this, android.R.layout.simple_list_item_1,//使用android内带的样式 language//数据来源 ); listview.setAdapter(adapter);} }
运行结果如下:
二、使用SimpleAdapter形成ListView
使用SimpleAdapter时。这里不再使用android自带的样式,因为不满足于我们的需求,所以自定义了一个列表项的样式,如下:item_with_icon_ahead.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:background="#ffffff"> <ImageView android:id="@+id/contact_list_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:src="@drawable/contact" android:layout_marginLeft="20dp" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:textColor="#000000" android:height="36dp"android:textSize="16sp"android:gravity="center_vertical"/> <TextView android:id="@+id/id" android:layout_width="fill_parent" android:layout_height="fill_parent"android:layout_marginLeft="10dp"android:textColor="#000000" android:height="36dp"android:textSize="16sp"android:gravity="center_vertical"/></LinearLayout>而代码中的写法为:(将数据填充到列表项布局去)
class Btn2Listener implements OnClickListener{ //SimpleAdapter创建列表@Overridepublic void onClick(View v) {// TODO Auto-generated method stub SimpleAdapter simpleAdapter = new SimpleAdapter(ListViewActivity.this //数据来源 , adpterData //列表项的样式,自定义的样式 , R.layout.item_with_icon_ahead //与下一个参数一一对应,取出数据来源中的对应名称数据填充到列表项样式中id符合的view中 , new String[]{"name","id"} , new int[]{R.id.name,R.id.id}); listview.setAdapter(simpleAdapter);} }
运行结果如下:
三、自定义BaseAdapter形成ListView
当列表项中存在着需要我们可以点击的控件时,simpleAdapter的应用就显得不够了。这时候我们还需要一种更自由的列表项来实现我们需要的各种操作。所以我们便可以自己继承BaseAdapter,实现我们想要的效果。
列表项的布局文件:item_with_checkbox.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/item_with_chkbox_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:src="@drawable/contact" /> <CheckBox android:id="@+id/item_with_chkbox_chkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:button="@drawable/list_checkable_item_state" android:visibility="gone" /> <!-- CheckBox中使用 android:button属性可以更改样式,但是这个样式需要有两种装谈 这里的 @drawable/list_checkable_item_state 就是由selector形成的图片资源--> <TextView android:id="@+id/item_with_chkbox_tv_contact_name" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="10dp" android:layout_toLeftOf="@id/item_with_chkbox_chkbox" android:layout_toRightOf="@id/item_with_chkbox_icon" android:gravity="center_vertical" android:height="36dp" android:text="这里要填用户姓名的" android:textColor="#000000" android:textSize="16sp" /> </RelativeLayout>
在上面的布局中,我们使用的CheckBox是自定义样式的,,但是CheckBox的自定义样式不是从background来更改而是android:button,它必须有两种状态:选中与不被选中状态下的图片。所以我们使用了一个包含selector的drawable资源:list_checkable_item_state.xml
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_checked="false" android:drawable="@drawable/unchecked_cell" /><!-- 指定失去焦点时的颜色 --><item android:state_checked="true"android:drawable="@drawable/checked_cell"/></selector>
在代码中,则是这么写的:
class Btn3Listener implements OnClickListener{ //自定义BaseAdapter创建列表@Overridepublic void onClick(View v) {// TODO Auto-generated method stublistview.setAdapter(new ListAdapter());} } class ListAdapter extends BaseAdapter{@Overridepublic int getCount() {// TODO Auto-generated method stubreturn adpterData.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn adpterData.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stub//生成列表项的内容RelativeLayout layout = null;if(convertView==null){layout = (RelativeLayout)LayoutInflater.from(ListViewActivity.this).inflate(R.layout.item_with_checkbox, null);}else{layout = (RelativeLayout)convertView;}final Map <String,String> map = adpterData.get(position);TextView textview = (TextView)layout.findViewById(R.id.item_with_chkbox_tv_contact_name);textview.setText(map.get("name"));final CheckBox chkbox = (CheckBox)layout.findViewById(R.id.item_with_chkbox_chkbox);chkbox.setVisibility(View.VISIBLE);chkbox.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(chkbox.isChecked()){Toast.makeText(ListViewActivity.this, map.get("name") + "被选中", Toast.LENGTH_SHORT).show();}else{}}});return layout;} }
运行结果如下:
- 07 - 基本控件:ListView 列表
- [Android] ListView (普通列表控件) 的基本使用方法
- [Android] ListView (普通列表控件) 的基本使用方法
- 列表视图控件ListView
- ListView下拉列表控件
- ListView列表视图控件
- Android ListView 列表控件
- 列表ListView控件的使用
- ListView列表控件的使用
- 列表控件ListView与下拉列表Spinner
- 从零开始学android:Android基本控件(下)—— 列表显示:ListView
- 从零开始学android:Android基本控件(下)—— 列表显示:ListView(GOOD)
- 列表控件--隐藏显示listview控件
- C# ListView控件基本用法
- Android ListView控件基本用法
- C# ListView控件基本用法
- Android ListView控件基本用法
- Android ListView控件基本用法
- Android简单的发短信案例
- MVC学习
- [Leetcode] Partition List
- C#位运算 http://www.cnblogs.com/sweting/archive/2009/11/05/1596873.html
- JVM调优总结(二)-一些概念
- 07 - 基本控件:ListView 列表
- 多线程信号量控制
- DBUnit向mysql导数据异常
- Oracle存储过程
- libgdx 环境搭建
- 仿豌豆荚实现android连接pc方法
- JVM调优总结(三)-基本垃圾回收算法
- Tomcat一步步实现反向代理、负载均衡、内存复制
- SCOPE_IDENTITY和@@identity的区别