ListView 简单理解
来源:互联网 发布:好身材的女明星 知乎 编辑:程序博客网 时间:2024/05/22 02:44
ListView(列表视图)
使用步骤
- 在布局xml文件声明listview控件
- 在java代码找到listview控件设置数据适配器,继承BaseAdapter
- getCount()确定listview里面有多少个条目
- getView(int position) 返回某个位置要显示的view对象
- View.inflate() 打气筒 可以把xml文件转成view显示
ListView视图控件
列表信息很多时候,滑动起来很慢,这时listview有个属性android:fastScrollEnabled="true"//快速滑动
适配器.:就是把一些数据在View上显示。可以看作是界面数据绑定的一种理解。它所操纵的数据一般都是一些比较复杂的数据,如数组,链表, 数据库,集合等
常用适配器 ArrayAdapter ,SimpleAdapter 他们都是继承于 BaseAdapter
一般对于前两个适配器,他们的数据来源无非就是String[]或者List 。下面我们列举两个例子:
ArrayAdapter(数组适配器)作为纯文本,单一内容时使用。List
例一,数组作为数据源,填充的是ArrayAdapterprivate ListView lv;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); String[] objects = new String[]{"Animation","App","content","Media","NFC","OS"};// 传入字符串内容 lv.setAdapter(new ArrayAdapter<String>(this, // 赋值 ArrayAdapter定义泛型<String>(参数1:context, R.layout.item,//参数2:自定义布局, objects)); //参数3:String[]数组内容);}
SimpleAdapter()作为图片和文本时使用,List
例二:List作为数据源,填充的是SimpleAdapterprivate ListView lv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();// List<Map<String,Object>>,进行图片文字显示 Map<String, Object> map1 = new HashMap<String, Object>();// 在ListView显示一行内容 map1.put("icon", R.drawable.ic_menu_preferences); // 绑定图片 map1.put("name", "功能设置"); // 绑定文字内容 data.add(map1); // 添加到List集合里 Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("icon", R.drawable.ic_menu_recent_history); map2.put("name", "时钟设置"); data.add(map2); // 赋值 SimpleAdapter (参数1:context,参数2:自定义布局,参数3:); lv.setAdapter(new SimpleAdapter(this, // 赋值 SimpleAdapter (参数1:context, data, // 参数2:List<Map<String,Object>>名 R.layout.item, // 参数3:自定义布局 new String[]{"icon","name"}, // 参数4:String[]里放入 Map的key键 new int[]{R.id.iv,R.id.tv})); // 参数5:int[]里放入 自定义布局里的控件 ImageView 和 TextView}
BaseAdapter(基础适配器)以下是自定义适配器继承 BaseAdapter
// 设置适配器 private class MyAdapter extends BaseAdapter { // 获取listView所要显示的次数 @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } // 获得在listView所要显示的内容 @Override public View getView(int position, View convertView, ViewGroup parent) { // 此块代码是写入到 XML中 LinearLayout,代码创建布局属性;LinearLayout显示数据有限,数据一旦过多就奔溃 LinearLayout ll = new LinearLayout(MainActivity.this); ll.setOrientation(LinearLayout.HORIZONTAL); ll.setGravity(Gravity.CENTER_VERTICAL); ImageView iv = new ImageView(MainActivity.this); String sex = list.get(position).getSex(); if ("man".equals(sex)) { iv.setImageResource(R.mipmap.ic_launcher); } else { iv.setImageResource(R.mipmap.ic_launcher); } TextView tv = new TextView(MainActivity.this); tv.setText(list.get(position).getName()); ll.addView(iv,50,50); ll.addView(tv); return ll; } }); // 如果条目多,快速滑动,会出现内存溢出,这时需要复用listView缓存对象(convertView),把用过的条目复用回收 TextView tv = null; if (convertView == null) { // 缓存不存在就创建 ll = new TextView(MainActivity.this); } else { // 存在的话就进行复用回收 ll = (TextView) convertView; } // View.inflate() 打气筒 可以把xml文件转成view显示,获取控件在liteView里显示 @Override public View getView(final int position, View convertView, ViewGroup parent) { // 用 ListView 显示数据 View view = null; if (convertView == null) { // 打气把 item.xml 打气到view view = View.inflate(MainActivity.this, R.layout.item, null); } else { view = convertView; } // findViewById,前面记得要指明是 View.findViewById() 否则默认是MainActivity.findViewById(),获取控件信息会出错 ImageView image = (ImageView) view.findViewById(R.id.item_image); TextView text = (TextView) view.findViewById(R.id.item_text); Student student = list.get(position); String sex = student.getSex(); if ("man".equals(sex)) { image.setImageResource(R.mipmap.nan); } else { image.setImageResource(R.mipmap.nv); } text.setText(student.getName()); return view;}
adapter.notifyDataSetChanged(); // 通知数据适配器更新数据,而不是new出来新的数据适配器
例子: //获取数据库的全部记录,刷新显示数据 private void refreshData() { list = sql.findAdd(); if (adapter == null) { adapter = new MyAdapter(); lv.setAdapter(adapter); } else { // 通知数据适配器更新数据,而不是new出来新的数据适配器 adapter.notifyDataSetChanged(); } }
1 0
- ListView 简单理解
- ListView的简单理解
- Android ListView复杂使用方式简单理解
- Android ListView理解,BaseAdapter
- Android ListView理解,BaseAdapter
- Android ListView理解
- Android ListView理解
- ListView的理解
- ListView的理解
- listView控件的理解
- Android ListView理解,BaseAdapter
- listView 我的理解
- 对listView的理解
- ListView深入理解
- Listview的理解①
- listview的一些理解
- ListView的理解
- rowid 简单理解理解
- nodejs群聊和私聊
- LeetCode---2.StringEasy
- Scala学习(2)——Scala基础知识续
- 理解JavaScript中的作用域和上下文
- 东软学习第二天
- ListView 简单理解
- 华为OJ——iNOC产品部--完全数计算
- JavaScript创建对象4种方法详解
- jzoj 1579. 【普及模拟】老鼠 解题报告
- Opencv图像识别从零到精通(6)----访问图像像素
- 不属于冯诺依曼体系结构必要组成部分是:
- 华为OJ——输入n个整数,输出其中最小的k个
- 在Android studio控制台中显示输出内容
- atoi---ASCII to integer,将字符串转换成整形,经常用的转换符号