使用单元测试添加数据:

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把数据显示至屏幕相关推荐

  1. Android之设置ListView数据显示的动画效果

    效果图: 平时我们要实现ListView数据显示时的动画效果,可以使用LayoutAnimationController为ListView设置动画效果,并通过ListView的setLayoutAni ...

  2. android学习笔记----ListView和各种适配器简介

    学习笔记 目录 打气筒(LayoutInflater对象)介绍: ArrayAdapter用法: 关于具有自定义 ArrayAdapter 的示例应用见这里: SimpleAdapter用法: 关于L ...

  3. Android UI设计——ListView练习(制作水果选择菜单)

    功能说明: 通过使用ListView制作一个水果选择菜单,菜单中有多种水果,菜单每种水果以水果选择框, 水果图片, 水果名称的形式展现在ListView中的每个Item中. 1. 通过水果多选框可以选 ...

  4. Android--数据库数据显示至屏幕

    MainActivity.java 这段代码的作用是从数据库中获取到数据并显示在界面上 import java.util.ArrayList; import java.util.List;import ...

  5. android列表滑到底部,Android中判断listview是否滑动到顶部和底部的实现方法

    今天实现listview的下拉刷新和上拉加载的时候,遇到了一个问题,*就是说需要根据listview中滑动的位置来进行下拉刷新和上拉加载.* 具体点,只有当我的listview滑动到最顶部的时候,这时 ...

  6. android中控制ListView宽度和高度

    ============问题描述============ 给listveiw填充item布局都是wrap_content,listview自身也使用wrap_content,可是实际显示效果listv ...

  7. Android学习笔记-ListView

    今天主要是学习了ListView控件.先把代码粘一下. package com.eoeAndroid.list; import java.util.ArrayList; import java.uti ...

  8. Android 系统(188)---Android开发:ListView、AdapterView、RecyclerView全面解析

    Android开发:ListView.AdapterView.RecyclerView全面解析 目录 ListView.AdapterView.RecyclerView全面解析.png Adapter ...

  9. 【Android UI】ListView系列一(基础篇)

    ----–ListView基础 ListView是一个用于显示滚动的列表项的视图组.listview通过一个适配器adapter将数据以列表的形式展示出来.listview可以说是Android应用层 ...

  10. android 字母索引 listview

    带有字母所以的listview ,以下是效果图 1.以下是界面的布局文件 <?xml version="1.0" encoding="utf-8"?> ...

最新文章

  1. 神经网络的设计与分析之概述
  2. NMAP分布式扫描工具dnmap
  3. Unsupported compiler 'GCC 4.2' selected for architecture 'i386'错误
  4. 3.JAVA中的多态
  5. 数据结构-----二叉树,树,森林之间的转换
  6. 西门子array数据类型_西门子S71200之间以太网通信(图文)
  7. python网络爬虫(三)数据抓取
  8. CODEVS-2050 派对灯
  9. 计算机组成原理学习的一些感悟
  10. 在线URL转sitemap工具
  11. linux查看iozone安装目录,使用IOzone测试磁盘性能
  12. OpenCV_连通区域分析----Two-Pass法
  13. cad批量打印_CAD批量打印(探索者易打软件)
  14. 写在控制层的VO是什么?
  15. idea中加入插入当前系统日期快捷键
  16. Flask接口服务处理全局异常
  17. 速腾 RS-Bpearl 显示点云
  18. 监控系统为什么要加流媒体服务器,视频监控系统为什么要使用流媒体服务器做视频分发?...
  19. 如何用画图框住所选内容_我们知道您的住所-在线隐私之死
  20. 进阶面试的必看的ORM架构之 ORM简介

热门文章

  1. WINDOWS编译OpenJDK8的问题及解决办法
  2. 管理感悟:怎样给程序找好的思路
  3. Linux 安装 OFFICE 2007
  4. 找工作,首先找的是老板和主管
  5. 手机后盖透明并不美观
  6. 管理感悟:能表格不文字
  7. 线条边框简笔画图片大全_表情包丨表情包简笔画图片大全可爱
  8. win8系统服务器地址怎么查,win8查询服务器地址
  9. VS C++ 从字符串中查找字符最后一次出现的位置 strrchr
  10. C# 静态类初始化 结构体初始化