ListView
         1.三种Adapter构建ListView
                ListView添加条目的时候, 可以使用setAdapter(ListAdapter)方法, 常用的ListAdapter有三种
                BaseAdapter: 定义一个类继承BaseAdapter, 重写4个抽象方法, ListView的条目是由getView()方法构建出来的
                SimpleAdapter: 创建SimpleAdapter对象时, 传入数据(List<Map<String, ?>>), 并指定数据的绑定关系

                SimpleCursorAdapter: 创建SimpleCursorAdapter对象时, 传入一个Cursor, 指定数据的绑定关系

          2.监听ListView的点击
调用ListView.setOnItemClickListener(OnItemClickListener)方法注册一个监听器
在监听器的onItemClick()方法中使用 parent.getItemAtPosition(position) 方法可以获取指定条目上的数据
BaseAdapter:返回的就是自定义的getItem()方法中返回的数据
SimpleAdapter:返回的是一个Map, 就是创建SimpleAdapter时List中的一个Map
SimpleCursorAdapter:返回的是一个Cursor, 这个Cursor就是创建时传入的Cursor, 但是已经通过moveToPosition()方法指定到点击的索引了

一:BaseAdapter添加方式:
1.查询出要被添加的数据
2.获取ListView对象
3.创建一个类继承BaseAdapter,实现其中的方法
4.给ListView对象设置适配器personLV.setAdapter(new MyBaseAdapter());

import java.util.List;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;import com.xxc.dao.PersonDao;
import com.xxc.domain.Person;/*** 注意:*  BaseAdapter生成的条目,进行Item点击事件监听的时候,*  parent.getItemAtPosition(position)返回的是person对象*  因为调用的是生成条目对象MyBaseAdapter类中的getItem方法*   */
public class BaseAdapterActivity extends Activity {private ListView personLV;private List<Person> persons;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);PersonDao dao = new PersonDao(getApplicationContext());persons = dao.queryAll();//查询数据personLV = (ListView) findViewById(R.id.personLV);//获取ListViewpersonLV.setAdapter(new MyBaseAdapter());//给ListView添加适配器,按照adapter中的方法对ListView添加条目personLV.setOnItemClickListener(new MyOnItemClickListener());//给条目添加条目点击监听器}/*** 点击事件监听器*/private class MyOnItemClickListener implements OnItemClickListener {public void onItemClick(AdapterView<?> parent, View view, int position,long id) {Person p = (Person) parent.getItemAtPosition(position);//其实就是调用了MyBaseAdapter中的getItem方法,返回指定条目上的数据Toast.makeText(getApplicationContext(), p.getId()+","+p.getName()+","+p.getBalance(), Toast.LENGTH_SHORT).show();}}/*** 将每个Person对象生成一个条目,将每个条目添加到ListView中*/private class MyBaseAdapter extends BaseAdapter {public int getCount() {//返回ListView中要显示的条目数量(说白了就是,person集合元素的个数)return persons.size();}public Object getItem(int position) {//返回指定位置上的对象return persons.get(position);}public long getItemId(int position) {//返回条目的id,从0开始return position;}//返回指定位置上的View,添加到ListView中,也就是说Person集合有几个元素就调用这个方法几次,一次生成一个条目public View getView(int position, View convertView, ViewGroup parent) {//因为屏幕最多显示10个条目,上下移动的时候都是移动的时候创建的,而不是一次创建完的,convertView代表移出屏幕外的那个条目Person person = persons.get(position);/** inflate充气的意思,理解为构建一个条目* 参数一:上下文环境* 参数二:item的布局文件* 参数三:将item挂到哪个组件上,如果写null,默认挂到ListView上*//*** 千万要注意:* 此时SQLiteNewActivity类中使用findViewById并不能找到条目中的id,name,balance组件* 因为此时还没加载到Activity中* 所以需要靠item(条目)来获取条目里的组件* item.findViewById* */View item = View.inflate(getApplicationContext(), R.layout.item, null);TextView idTV = (TextView) item.findViewById(R.id.idTV);TextView nameTV = (TextView) item.findViewById(R.id.nameTV);TextView balanceTV = (TextView) item.findViewById(R.id.balanceTV);/*** 千万要注意:* setText(CharSequence text)* setText(int resid)* 这个方法有重载,如果传入int类型的值进去(比如person的id和balance)* 程序会去找R文件中内部类string中的值,所以肯定找不到* 因此setText的时候务必转成字符串*/idTV.setText(person.getId()+"");nameTV.setText(person.getName());balanceTV.setText(person.getBalance()+"");return item;}}
}

二.SimpleAdapter添加方式:

         1.查询出要被添加的数据
         2.创建一个Map元素的List集合    List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();
         3.遍历需要被添加的数据,将数据以键值对的方式加入到map集合中,再将Map集合加入到List集合
         4.获取ListView对象   ListView personLV = (ListView) findViewById(R.id.personLV);
         5.给ListView设置适配器 

personLV.setAdapter(new SimpleAdapter(this, data , R.layout.item, new String[]{"id","name","balance"}, new int[]{R.id.idTV,R.id.nameTV,R.id.balanceTV}));
/* SimpleAdapter传入指定的数据和布局文件,以及匹配关系,自动生成View,装入LsitView
 * 参数一:上下文环境
 * 参数二:数据,List<Map<String,Object>>,每个Person的数据装入一个Map,将所有Map装入List
 * 参数三:布局文件的资源id,因为每个条目也有自己的布局方式,这个布局指的是每个item的布局
 * 参数四:Map中的key,和参数五中的id所对应的组件对应,将指定Key对应的Value,放入id对应的组件上
 * 参数五:View中的id
 */

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;import com.xxc.dao.PersonDao;
import com.xxc.domain.Person;/*** 注意:*  SimpleAdapter生成的条目,进行Item点击事件监听的时候,*  parent.getItemAtPosition(position)返回的是map集合**/
public class SimpleAdapterActivity extends Activity {private ListView personLV;private List<Person> persons;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);PersonDao dao = new PersonDao(getApplicationContext());persons = dao.queryAll();//查询数据personLV = (ListView) findViewById(R.id.personLV);//获取ListViewList<Map<String, Object>> data = new ArrayList<Map<String,Object>>();//把每个Person的数据装入一个map,再将所有map装入listfor (Person p : persons) {Map<String,Object> map = new HashMap<String, Object>();map.put("id", p.getId());map.put("name", p.getName());map.put("balance", p.getBalance());data.add(map);}/** 参数一:上下文环境* 参数二:遍历Person集合,将一个Person对象数据装入Map集合,再将所有Map集合装入List集合中* 参数三:生成条目的布局文件* 参数四:map中的key  * 参数五:条目中的组件id* 参数四和参数五的意思是:*            根据key去找map集合找到对应的value值,将value放到参数五中的组件中(先后顺序)*/personLV.setAdapter(new SimpleAdapter(getApplicationContext(), data , R.layout.item, new String[]{"id","name","balance"}, new int[]{R.id.idTV,R.id.nameTV,R.id.balanceTV}));personLV.setOnItemClickListener(new MyOnItemClickListener());//给条目添加条目点击监听器}/*** 点击事件监听器*/private class MyOnItemClickListener implements OnItemClickListener {public void onItemClick(AdapterView<?> parent, View view, int position,long id) {Map<String,Object> map =  (Map<String, Object>) parent.getItemAtPosition(position);//其实就是调用了MyBaseAdapter中的getItem方法,返回MapToast.makeText(getApplicationContext(), map.get("name").toString(), Toast.LENGTH_SHORT).show();}}
}

三:SimpleCursorAdapter

1.查询出要被添加的数据,返回的是一个Cursor类型对象

2.获取ListView对象

3.在ListView上设置适配器

注意:查询出来的主键必须以_id命名,最好就是数据库表中的主键列名就是_id,如果不能改变,就在查询的时候取别名。

dao层

/*** 查询person表中所有记录,返回 Cursor类型*/
public Cursor queryAllCursor(){SQLiteDatabase db = helper.getReadableDatabase();Cursor c = db.query("person", new String[]{"id _id ","name","balance"}, null, null, null, null, "id DESC");return c;
}

Activity

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;public class SimpleCursorAdapterActivity extends Activity {private ListView personLV;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);PersonDaoNew dao = new PersonDaoNew(getApplicationContext());Cursor c = dao.queryAllCursor();personLV = (ListView) findViewById(R.id.personLV);personLV.setAdapter(new SimpleCursorAdapter(this, R.layout.item, c,//new String[]{"_id","name","balance"}, //new int[]{R.id.idTV,R.id.nameTV,R.id.balanceTV}));///**参数一:上下文环境*参数二:布局文件资源ID*参数三:包含数据的游标*参数四:游标中的列名*参数五:条目中的组件ID,游标中的数据就会放在这些组件上 */personLV.setOnItemClickListener(new MyOnItemClickListener());//添加监听器}//监听器的实现类private class MyOnItemClickListener implements OnItemClickListener{public void onItemClick(AdapterView<?> parent, View view, int position,long id) {Cursor c = (Cursor) parent.getItemAtPosition(position);Toast.makeText(getApplicationContext(), c.getString(0), Toast.LENGTH_SHORT).show();}}
}

item.xml  条目的布局

<?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" android:padding="10dp"><TextViewandroid:id="@+id/idTV"android:textSize="20sp"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="1" /><TextViewandroid:layout_weight="2"android:id="@+id/nameTV"android:layout_width="0dp"android:textSize="20sp"android:layout_height="wrap_content"android:text="皮卡丘" /><TextViewandroid:layout_weight="2"android:id="@+id/balanceTV"android:layout_width="0dp"android:layout_height="wrap_content"android:text="1000"android:textSize="20sp" /></LinearLayout>

main.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="vertical" ><!-- 这个是表头的设置,下面拖动,表头不会动 --><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" android:padding="10dp"><TextViewandroid:textSize="20sp"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="序号" /><TextViewandroid:layout_weight="2"android:layout_width="0dp"android:textSize="20sp"android:layout_height="wrap_content"android:text="姓名" /><TextViewandroid:layout_weight="2"android:layout_width="0dp"android:layout_height="wrap_content"android:text="余额"android:textSize="20sp" /></LinearLayout><!-- 这个是表头的设置,下面拖动,表头不会动 --><ListView android:id="@+id/personLV"android:layout_width="fill_parent"android:layout_height="fill_parent"/></LinearLayout>

四:ArrayAdapter

最简单的数据适配器


Activity

package com.xxc.day4;import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView array_lv = (ListView) findViewById(R.id.array_lv);String[] objs = new String[]{"王立军1","王立军2","王立军3","王立军4","王立军5","王立军6"};/*** 参数一:上下文* 参数二:资源文件,是一个TextView,由android自己定义的* 参数三:要显示的数据*/ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, objs);array_lv.setAdapter(adapter);}
}

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ListViewandroid:id="@+id/array_lv" android:layout_width="match_parent"android:layout_height="match_parent"></ListView>
</LinearLayout>


Android之ListView相关推荐

  1. Android使用ListView控件问题

    Android使用ListView控件问题: The application has stopped unexpectedly, please try again. 开发环境:android 1.6 ...

  2. android 分组 listview,Android实现的ListView分组布局改进示例

    本文实例讲述了android实现的listview分组布局改进方法.分享给大家供大家参考,具体如下: 由于是在网上转载的一篇文章,在这里就不多说废话了,首先看一下最终的效果图: 然后是实现该listv ...

  3. Android实现ListView异步加载图片

    转: http://www.iteye.com/topic/685986 ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法 ...

  4. Android 利用ListView制作带竖线的多彩表格

    1.listview与GridView 其实Android本身是有表格控件(GridView)的,但是GridView的每一列的宽度被限定为一样宽,有时设计表格时,列宽不可能为同一宽度,所有可以用Li ...

  5. Android DrawLayout + ListView 的使用(一)

    想做一个APP,设计中有侧边栏这个功能,所以现在开始学习下侧边栏的实现. 在官方的UI空间中已经给出了DrawerLayout这个侧滑的菜单空间. 因为在使用DrawerLayout的时候遇到了些问题 ...

  6. ym——Android之ListView性能优化

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! Android之ListView性能优化 假设有看过我写过的15k面试题的朋友们一定知 ...

  7. 我的Android进阶之旅------Android二级ListView列表的实现

    实现如下图所示的二级列表效果 首先是在布局文件中,布局两个ListView,代码如下: <LinearLayout xmlns:android="http://schemas.andr ...

  8. Android 动态刷新listview中的数据

    之前一直困扰listview刷新后位置的问题,现在才明白,原来不能重新设置listview的adapter,而应该用notifyDataSetChanged()来刷新,这样位置就不会置顶. 下面做了一 ...

  9. android之ListView和adapter配合显示图片和文字列表

    listView页面布局:layout/activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.c ...

  10. android 之ListView总结(一个综合实例)

    实例效果: 后台逻辑: package com.hsj.example.paginationloadnetdatademo02;import android.graphics.Bitmap; impo ...

最新文章

  1. 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
  2. 美化你的.net WinForm应用程序
  3. POJ 1039 Pipe
  4. MagicMongoDBTool数据管理工具使用介绍
  5. MySQL去重保留最大的那条记录(取最新的记录)
  6. websocket动态添加广播路径_数据可视化WebSocket实现聊聊我的实现思路
  7. 213.打家劫舍II
  8. 【操作系统】Nachos 内核线程
  9. 基于NXP iMX8测试Secure Boot功能部署
  10. 计算机英语 st,1st、2nd、3rd、…10th都是什么的缩写?怎么读?10th之...-1st-英语-司俜辰同学...
  11. 机器学习算法入门与编程实践
  12. stata输出相关系数表到word
  13. 为什么要学好数据结构和算法
  14. JavaScript——模拟自动饮料机
  15. CAD图纸导入Revit中怎么关闭不需要的图层
  16. linux主板上的网卡不显示,linux服务器更换主板后无法识别网卡解决办法
  17. 哪里有免费大文件传输平台?通过这4个网站免费来进行大文件传输
  18. SQL Server 数据分区管理
  19. PHP 导出excel表格的3种方法
  20. 读书郎平板中android,读书郎学生平板电脑怎么用 使用方法详解【图文】

热门文章

  1. ORA-20011 问题处理
  2. 最炫python表白代码_python炫酷烟花表白源代码
  3. 高端存储十面埋伏 华为全闪存系列亮剑出击
  4. linux打开笔记本摄像头驱动程序,Linux下使用Opencv打开笔记本摄像头
  5. OpenWrt 把SD卡挂载到 /overlay
  6. Scala语言会取代Java的吗?
  7. 键盘无响应-如何修复键盘注册表
  8. html 给word插入页眉和页脚,Word文档如何在任意页插入页眉和页脚
  9. 外贸中一些单词的缩写
  10. 基于广度优先搜索的六度空间理论的验证