android 70 使用ListView把数据显示至屏幕
使用单元测试添加数据:
package com.itheima.showdata;import java.sql.ResultSet;import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper;public class MyOpenHelper extends SQLiteOpenHelper {public MyOpenHelper(Context context) {super(context, "people.db", null, 1);// TODO Auto-generated constructor stub }//数据库创建时,此方法会调用 @Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table person(_id integer primary key autoincrement, name char(10), salary char(20), phone integer(20))");}//数据库升级时,此方法会调用 @Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {System.out.println("数据库升级了");}}
package com.itheima.sqlitedatabase.test;import com.itheima.showdata.MyOpenHelper;import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; import android.test.AndroidTestCase;public class TestCase extends AndroidTestCase {private MyOpenHelper oh;private SQLiteDatabase db;//测试框架初始化完毕之后,在测试方法执行之前,此方法调用 @Overrideprotected void setUp() throws Exception {super.setUp();oh = new MyOpenHelper(getContext());db = oh.getWritableDatabase();}//测试方法执行完毕之后,此方法调用 @Overrideprotected void tearDown() throws Exception {// TODO Auto-generated method stubsuper.tearDown();db.close();}public void insertApi(){//把要插入的数据全部封装至ContentValues对象for (int i = 0; i < 50; i++) {ContentValues values = new ContentValues();values.put("name", "赵"+i);values.put("phone", "159"+i+i);values.put("salary", "160"+i+i);db.insert("person", null, values);}}}
第一种页面显示:
<ScrollView android:layout_width="match_parent"android:layout_height="match_parent"xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"> <LinearLayout android:id="@+id/ll"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" android:orientation="vertical"></LinearLayout> </ScrollView>
package com.itheima.showdata;import java.util.ArrayList; import java.util.List;import com.itheima.showdata.domain.Person;import android.os.Bundle; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.view.Menu; import android.widget.LinearLayout; import android.widget.TextView;public class MainActivity extends Activity {List<Person> personList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);personList = new ArrayList<Person>();//把数据库的数据查询出来MyOpenHelper oh = new MyOpenHelper(this);//这里上下文传this就可以。SQLiteDatabase db = oh.getWritableDatabase();Cursor cursor = db.query("person", null, null, null, null, null, null, null);while(cursor.moveToNext()){String _id = cursor.getString(0);String name = cursor.getString(1);String salary = cursor.getString(2);String phone = cursor.getString(3);Person p = new Person(_id, name, phone, salary);personList.add(p);}LinearLayout ll = (LinearLayout) findViewById(R.id.ll);//把数据显示至屏幕for (Person p : personList) {//1.集合中每有一条元素,就new一个textViewTextView tv = new TextView(this);//2.把人物的信息设置为文本框的内容 tv.setText(p.toString());tv.setTextSize(18);//3.把textView设置为线性布局的子节点 ll.addView(tv);}}}
第二种页面显示:
主activity和条目item
Activity:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/ll"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" android:orientation="vertical"><ListView android:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"></ListView> </LinearLayout>条目item:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><TextView android:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="名字"android:textSize="25sp"/><LinearLayout android:layout_alignParentRight="true" 位于父容器右边android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical" 竖直排列的线性布局><TextView android:id="@+id/tv_phone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="号码"/><TextView android:id="@+id/tv_salary"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="工资"/></LinearLayout> </RelativeLayout>
java代码:
package com.itheima.showdata;import java.util.ArrayList; import java.util.List;import com.itheima.listviewshowdata.R; import com.itheima.showdata.domain.Person;import android.os.Bundle; import android.app.Activity; import android.app.ListActivity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView;public class MainActivity extends Activity {List<Person> personList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);personList = new ArrayList<Person>();//把数据库的数据查询出来MyOpenHelper oh = new MyOpenHelper(this);SQLiteDatabase db = oh.getWritableDatabase();Cursor cursor = db.query("person", null, null, null, null, null, null, "10,1000");//"10,1000"是分页查询,表示从10条开始查查1000条,while(cursor.moveToNext()){String _id = cursor.getString(0);String name = cursor.getString(1);String salary = cursor.getString(2);String phone = cursor.getString(3);Person p = new Person(_id, name, phone, salary);personList.add(p);}//ListView是列表,ListView只带滑动的功能,ListView的每一行数据是item条目View对象。ListView lv = (ListView) findViewById(R.id.lv);lv.setAdapter(new MyAdapter());//M:personList V:ListView C:MyAdapter }//如果一屏幕只能显示10个,则一开始只显示10个调用getView方法10次,//向下滑动的时候会依次调用getView方法并传入position的值为11,12,13,向上滚动的时候也会依次调用getView并传入position为9,8,7//滚动屏幕的时候把后面的数据加载进来前面的移除,保证内存永远只有10条数据,class MyAdapter extends BaseAdapter{//系统调用,用来获知集合中有多少条元素,适配器要处理的数据量 @Overridepublic int getCount() {return personList.size();}//由系统调用,获取一个View对象,作为ListView的条目//position:本次getView方法调用所返回的View对象,在listView中是处于第几个条目,那么position的值就是多少 @Overridepublic View getView(int position, View convertView, ViewGroup parent) {Person p = personList.get(position); // TextView tv = new TextView(MainActivity.this); // tv.setText(p.toString()); // tv.setTextSize(18);System.out.println("getView调用:" + position + ";" + convertView);View v = null;//将每一个条目封装为View对象//判断条目是否有缓存,移出的条目不会立即销毁而是会缓存起来,再次滑动出来的时候不会取而是从缓存取出来,if(convertView == null){//把布局文件填充成一个View对象,ViewGroup是View的子类,可以有子节点,View不能有子节点,TextView也不能有子节点v = View.inflate(MainActivity.this, R.layout.item_listview, null);}else{v = convertView;//用的是缓存,例如当滑出第12个的时候系统发现有缓存(第1第2个的缓存),则会把第1的缓存放到第12的位置,所以即使使用的是缓存也要写下面的代码重新把第1的缓存变成第12的(内存不会新增只是做了改变)。 }//获取布局填充器对象 // LayoutInflater inflater = LayoutInflater.from(MainActivity.this); // 使用布局填充器填充布局文件 // View v2 = inflater.inflate(R.layout.item_listview, null); // LayoutInflater inflater2 = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);//布局填充服务,用于填充布局。 // View v3 = inflater2.inflate(R.layout.item_listview, null);//通过资源id查找组件,注意调用的是View对象的findViewByIdTextView tv_name = (TextView) v.findViewById(R.id.tv_name);tv_name.setText(p.getName());TextView tv_phone = (TextView) v.findViewById(R.id.tv_phone);tv_phone.setText(p.getPhone());TextView tv_salary = (TextView) v.findViewById(R.id.tv_salary);tv_salary.setText(p.getSalary());return v;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}} /*###BaseAdapter * 必须实现的两个方法 * 每一个条目都是一个View对象:View对象是控件的基类,所以就能够显示任意控件。* 第一个//系统调用此方法,用来获知模型层有多少条数据@Overridepublic int getCount() {return people.size();}* 第二个//系统调用此方法,获取要显示至ListView的View对象//position:是return的View对象所对应的数据在集合中的位置@Overridepublic View getView(int position, View convertView, ViewGroup parent) {System.out.println("getView方法调用" + position);TextView tv = new TextView(MainActivity.this);//拿到集合中的元素Person p = people.get(position);tv.setText(p.toString());//把TextView的对象返回出去,它会变成ListView的条目return tv;} * 屏幕上能显示多少个条目,getView方法就会被调用多少次,屏幕向下滑动时,getView会继续被调用, 创建更多的View对象显示至屏幕 ###条目的缓存 * 当条目划出屏幕时,系统会把该条目缓存至内存,当该条目再次进入屏幕, 系统在重新调用getView时会把缓存的条目作为convertView参数传入, 但是传入的条目不一定是之前被缓存的该条目,即系统有可能在调用getView方法获取第一个条目时, 传入任意一个条目的缓存*/}
转载于:https://www.cnblogs.com/yaowen/p/4927859.html
android 70 使用ListView把数据显示至屏幕相关推荐
- Android之设置ListView数据显示的动画效果
效果图: 平时我们要实现ListView数据显示时的动画效果,可以使用LayoutAnimationController为ListView设置动画效果,并通过ListView的setLayoutAni ...
- android学习笔记----ListView和各种适配器简介
学习笔记 目录 打气筒(LayoutInflater对象)介绍: ArrayAdapter用法: 关于具有自定义 ArrayAdapter 的示例应用见这里: SimpleAdapter用法: 关于L ...
- Android UI设计——ListView练习(制作水果选择菜单)
功能说明: 通过使用ListView制作一个水果选择菜单,菜单中有多种水果,菜单每种水果以水果选择框, 水果图片, 水果名称的形式展现在ListView中的每个Item中. 1. 通过水果多选框可以选 ...
- Android--数据库数据显示至屏幕
MainActivity.java 这段代码的作用是从数据库中获取到数据并显示在界面上 import java.util.ArrayList; import java.util.List;import ...
- android列表滑到底部,Android中判断listview是否滑动到顶部和底部的实现方法
今天实现listview的下拉刷新和上拉加载的时候,遇到了一个问题,*就是说需要根据listview中滑动的位置来进行下拉刷新和上拉加载.* 具体点,只有当我的listview滑动到最顶部的时候,这时 ...
- android中控制ListView宽度和高度
============问题描述============ 给listveiw填充item布局都是wrap_content,listview自身也使用wrap_content,可是实际显示效果listv ...
- Android学习笔记-ListView
今天主要是学习了ListView控件.先把代码粘一下. package com.eoeAndroid.list; import java.util.ArrayList; import java.uti ...
- Android 系统(188)---Android开发:ListView、AdapterView、RecyclerView全面解析
Android开发:ListView.AdapterView.RecyclerView全面解析 目录 ListView.AdapterView.RecyclerView全面解析.png Adapter ...
- 【Android UI】ListView系列一(基础篇)
----–ListView基础 ListView是一个用于显示滚动的列表项的视图组.listview通过一个适配器adapter将数据以列表的形式展示出来.listview可以说是Android应用层 ...
- android 字母索引 listview
带有字母所以的listview ,以下是效果图 1.以下是界面的布局文件 <?xml version="1.0" encoding="utf-8"?> ...
最新文章
- 神经网络的设计与分析之概述
- NMAP分布式扫描工具dnmap
- Unsupported compiler 'GCC 4.2' selected for architecture 'i386'错误
- 3.JAVA中的多态
- 数据结构-----二叉树,树,森林之间的转换
- 西门子array数据类型_西门子S71200之间以太网通信(图文)
- python网络爬虫(三)数据抓取
- CODEVS-2050 派对灯
- 计算机组成原理学习的一些感悟
- 在线URL转sitemap工具
- linux查看iozone安装目录,使用IOzone测试磁盘性能
- OpenCV_连通区域分析----Two-Pass法
- cad批量打印_CAD批量打印(探索者易打软件)
- 写在控制层的VO是什么?
- idea中加入插入当前系统日期快捷键
- Flask接口服务处理全局异常
- 速腾 RS-Bpearl 显示点云
- 监控系统为什么要加流媒体服务器,视频监控系统为什么要使用流媒体服务器做视频分发?...
- 如何用画图框住所选内容_我们知道您的住所-在线隐私之死
- 进阶面试的必看的ORM架构之 ORM简介