[android] listview入门
Listview组件非常重要,4分之一的时间都是在搞这个,还是通过上一节的数据库,写个for循环,插入50条数据。
先使用笨方法显示数据,根布局LinearLayout 定义一个id,在activity里面获取这个id。
获取PersonDao对象,调用dao对象的查询全部的方法,得到一个list集合的数据。
遍历这个集合,遍历中调用person实体类对象的toString()方法,得到一条记录的字符串。
遍历中实例化TextView对象,调用TextView对象的setText()方法,把一条信息放进去。
调用LinearLayout对象的addView(child)方法,child参数就是子view对象
笨方法代码:
LinearLayout lv=(LinearLayout) findViewById(R.id.lv);
PersonDao dao=new PersonDao(this);
List<Person> persons=dao.select();
for(Person person:persons){
TextView tv=new TextView(this);
tv.setText(person.toString());
lv.addView(tv);
}
此时屏幕高度不够,超出去的信息会直接隐藏,系统给提供了一个组件叫ScrollView可以上下滚动,包裹一下LinearLayout,此时会提示命名空间那里错误,把命名空间放在SorollView里,指定宽度和高度都是填充父窗体
当数据量比较大时,这样直接new出无数对象很消耗资源,应该是在滑动过程中动态new出组件对象,超出视线就销毁掉,这个时候引入了新的控件ListView
获取ListView对象,通过findViewById()方法,调用ListView对象的setAdapter(adapter)方法设置数据绑定到ListView,参数是一个ListAdapter接口类型,我们要实现这个接口,把实现类对象传进去,定义一个私有的内部类实现ListAdapter,这时会要求实现几十个方法,太多了,系统为我们提供了一个实现类BaseAdapter,默认的实现类大部分都是以BaseXxx,SimpleXxx,DefaultXxx开头
BaseAdapter是一个抽象类,要实现他的抽象方法,内部类继承BaseAdapter实现以下方法
getCount(),返回int数据的条数,把我的数据集合定义成成员属性,调用List集合size()方法
getItem(),
getItemId()
getView(position,) 控制索引位置的View对象,position是当前集合的索引,
在这个方法中,我们可以实例化TextView对象,需要传入上下文对象,使用getApplicationContext()获取上下文,调用TextView对象的setText(),数据是List集合调用get()方法,传入索引position获得,返回那个TV对象。在这个方法中Log.i()打印日志可以看到只会生成视线范围内的View对象。
activity代码:
package com.tsh.database; import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView; import com.tsh.database.dao.PersonDao;
import com.tsh.database.domain.Person; public class MainActivity extends Activity {
private List<Person> persons;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv=(ListView) findViewById(R.id.mylist);
PersonDao dao=new PersonDao(this);
persons=dao.select();
lv.setAdapter(new MyAdapter());
}
private class MyAdapter extends BaseAdapter{ @Override
public int getCount() {
// TODO Auto-generated method stub
return persons.size();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i("MainActivity", "生成对象"+position);
TextView tv=new TextView(getApplicationContext());
Person person=persons.get(position);
tv.setText(person.toString());
return tv;
} }
}
[android] listview入门的更多相关文章
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and ...
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解
原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...
- android ListView的介绍和优化
xml设计 <?xml version="1.0"?> -<RelativeLayout tools:context=".MainActivity&qu ...
- [译]:Xamarin.Android开发入门——Hello,Android深入理解
返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...
- [译]:Xamarin.Android开发入门——Hello,Android快速上手
返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...
- android ListView 九大重要属性详细分析、
android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...
- Android ListView onItemClick Not Work
Android ListView onItemClick Not Work ListView item中有Button和RadioButton的时候,它的Item点击事件不起作用,需要设置item的属 ...
- 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...
- Android ListView 常用技巧
Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...
随机推荐
- oracle数据导入
1.删除原有数据库的内容 drop user username cascade; 我的数据库名为test,所以sql语句为: drop user test cascade; 2.创建表空间: 语句为: ...
- mysql中删除重复记录,只保留一条
表结构如下: mysql> desc test1; +--------------+------------------+------+-----+---------+------------- ...
- Python开发系列
一 Python基础理论 Python简介 数据类型 字符编码与文件操作 函数 模块与包 常用模块 面向对象 网络编程 相关代码示例参考 https://github.com/Jonathan131 ...
- CS61A hw01
前不久在知乎上看到CS61A 和CS61B spring18 开课的消息.上去看了一眼,发现真的不错,所有proj hw都可以本地测试!也就是说除了没有课程成绩和官方讨论区和TA解答外,这个课完全可以 ...
- 【sql注入】浅谈sql注入中的Post注入
[sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...
- Javascript高级编程学习笔记(33)—— 客户端检测(2)怪癖检测
怪癖检测 和能力检测类似,但其目标不同 能力检测的目的是判断浏览器支不支持某种能力 而怪癖检测的目的是判断浏览器是否存在某些缺陷 这种时候需要我们执行一段代码来判断浏览器是否有这样的缺陷 或者说是怪癖 ...
- python写的压缩软件
import tkinterimport tkinter.filedialogimport osimport zipfileimport tkinter.messagebox #创建住窗口root = ...
- Day4:html和css
Day4:html和css 规范注意 链接里面不能再放链接. a里面可以放入块级元素. 空格规范 选择器与{之间必须包含空格. 如: .class {} 属性名与之后的:符号之间不允许包含空格, 而: ...
- Kubernetes集群搭建之Etcd集群配置篇
介绍 etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点. 简单 : 相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过g ...
- SonarQube 集成 GitLabCI
本文是用于分析SonarQube代码的质量,每次在GitLab上提交代码时都使用GitLab-CI运行器进行检查. 1.SonarQube with GitLab 安装插件GitLab-plugin ...