本文将介绍ListView和Inflater的使用,将接上一篇文章内容.

一.什么是ListView?

在android开发中ListView是比较常用的控件,ListView 控件可使用四种不同视图显示项目,1.大(标准)图标2.小图标3.列表4.报表,比较常用的是列表的形式.ListItem 对象可包含文本和图片。然而,若要使用图片则必须通过 Icons 和 SmallIcons 属性引用 ImageList控件。

本文将接着上一篇文章,将sqlite数据库的数据以列表的形式显示出来.

二.效果图

图1:

图2:

图3:

图4:

图5:

三.实现

/com/amos/android_db/MyActivity.java

package com.amos.android_db;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.amos.android_db.dao.Person;
import com.amos.android_db.dao.PersonDao; import java.util.List; public class MyActivity extends Activity { private ListView personListView;
private List<Person> persons;
LayoutInflater inflater;//打气筒 @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//inflater是一个系统服务,初始化系统服务,利用inflater将一个布局文件转化为一个对象
inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE); setContentView(R.layout.main);
PersonDao personDao = new PersonDao(this);
persons = personDao.findAll(); //第一步,得到组件的id的引用
personListView = (ListView) this.findViewById(R.id.listview_show_data);
//第二步,设置组件要显示的内容,listview要显示的内容比较复杂,需要数据的适配器
personListView.setAdapter(new MyListAdapter()); } public class MyListAdapter extends BaseAdapter { /**
* 返回当前有多少个条目
* @return
*/ @Override
public int getCount() {
return persons.size();
} /**
* 返回当前position位置对应的条目的object对象
* @param position
* @return
*/
@Override
public Object getItem(int position) {
return persons.get(position);
} /**
* 返回当前position位置对应条目的id
* @param position
* @return
*/
@Override
public long getItemId(int position) {
return position;
} /**
* 返回一个条目显示的具体内容
* 计算当前界面 会有多少个条目出现
* 1.得到每一个textview的高度
* 2.得到listview的高度
* 3.listview高度/textview高度=得到了一个屏幕显示textview的的个数
* listview的每一个条目的显示都需要调用一次getView的方法
* 屏幕上有多个item显示就会调用多少getview的方法
*
* @param position
* @param convertView
* @param parent
* @return
*/ @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TextView textView = new TextView(MyActivity.this);//图1
// textView.setText(persons.get(position).getName()+":"+persons.get(position).getAge());
// return textView; View view = inflater.inflate(R.layout.item, null);//图2-图5
Person person = persons.get(position);
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
TextView tv_age = (TextView) view.findViewById(R.id.tv_age);
tv_name.setText("姓名:" + person.getName());
tv_age.setText("年龄:" + person.getAge());
Log.d("item:",""+position);
return view;
}
} }

注:这个是程序的入口,首先初始化系统服务(inflater),然后将得到ListView组件的引用并设置组件适配器和要显示和内容.

ListView显示需要的三个元素

  • ListVeiw 用来展示列表的View。
  • 适配器 用来把数据映射到ListView上的中介。
  • 数据    具体的将被映射的字符串,图片,或者基本组件。

注:把打气筒相关的代码去掉就可以得到图1的结果,图2--图5是加入了布局文件后的效果,图4,图5是新add了一些数据到数据库里的,图4和图2是LogCat里的内容,意在表示每上下翻动时其数据库是动态加载的.

item.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/item"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:id="@+id/tv_name"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:id="@+id/tv_age"
/> </RelativeLayout>

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#fe824f"
android:text="下面显示所有账户信息"
/> <ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/listview_show_data"
>
</ListView>
</LinearLayout>

本文源码:https://github.com/amosli/android_basic/tree/android_db

Android学习---ListView和Inflater的使用,将一个布局文件转化为一个对象的更多相关文章

  1. Android学习---ListView的点击事件,simpleAdapter和arrayadapter,SimpleCursoAdapter的原理和使用

    如题,本文将介绍 listview的点击事件,simpleAdapter和arrayadapter的原理和使用. 1.ListView的注册点击事件 //注册点击事件 personListView.s ...

  2. Android开发-Listview中显示不同的视图布局

    1. 使用场景 在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能.convertView在Item为单一的同种类型布局时,能够 ...

  3. Android为ListView的Item设置不同的布局

    MainActivity如下: package cc.testlistview; import java.util.ArrayList; import java.util.HashMap; impor ...

  4. android学习笔记47——读写SD卡上的文件

    读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...

  5. Android Studio分类整理res/Layout中的布局文件(创建子目录)

    res/layout中的布局文件太杂,没有层次感,受不了的我治好想办法解决这个问题. 前几天看博客说可以使用插件分组,可惜我没找到.知道看到另一篇博客时,才知道这个方法不能用了. 不能用插件,那就手动 ...

  6. Android 解决在初次打开Activity加载布局文件时,ScrollView滚动条不在顶部的问题

    出现这种问题的情况列举:ScrollView中嵌套有(包括自定义)的ListView,GridView时,会出现这种情况 解决办法: 1.在布局加载时让ScrollView上面的那个控件聚焦,具体做法 ...

  7. Android查缺补漏(View篇)--布局文件中的“@+id”和“@id”有什么区别?

    Android布局文件中的"@+id"和"@id"有什么区别? +id表示为控件指定一个id(新增一个id),如: <cn.codingblock.vie ...

  8. Android 4.0 Launcher2源码分析——主布局文件(转)

    本文来自http://blog.csdn.net/chenshaoyang0011 Android系统的一大特色是它拥有的桌面通知系统,不同于IOS的桌面管理,Android有一个桌面系统用于管理和展 ...

  9. android 学习 ListView使用补充

    前面两篇学习适配器的时候用的就是listview,主要是简单的添加,今晚在看了下listview滚动状态事件和动态加载数据,一个小demo. listview的滚动状态主要有三种,onScrollSt ...

随机推荐

  1. 数据库——DQL(语句查询)

    查询的基本结构: 概念: 查询(DQL)是数据库中最为常用和复杂的一种SQL结构,学会编写查询SQL是程序员必须具备的能力. 要从数据库中查询数据,我们要使用SQL的SELECT语句.标准SELECT ...

  2. linux ssh publickey登录

    一.公钥认证的基本思想: 对信息的加密和解密采用不同的key,这对key分别称作private key和public key,其中,public key存放在目标服务器上,而private key为特 ...

  3. python模块之configparser

    configparser用于处理特定格式的文件,其本质上是利用open来操作文件. # 注释1 ; 注释2 [section1] # 节点 k1 = v1 # 值 k2:v2 # 值 [section ...

  4. PowerDesigner 把Comment复制到name中和把name复制到Comment

    在使用PowerDesigner对数据库进行概念模型和物理模型设计时,一般在NAME或Comment中写中文,在Code中写英文.Name用来显 示,Code在代码中使用,但Comment中的文字会保 ...

  5. Table of Contents ---BCM

    Table of ContentsAbout This Document................................................................ ...

  6. NoSQL学习——MongoDB

    MongoDB作为一款文档数据库,支持分片存储,scale-out,集群自动切换,下面将粗略的配置步骤总结如下: 几个重要概念: 数据库:集合--记录--游标(查询时标记序号) sharding分片: ...

  7. jfinal相关

    1:jfinal工具类 1):密码加密工具 HashKit.md5(String password);2):数据缓存工具类 chacheKit3):获取项目路径工具类: PathKit 4):读取文件 ...

  8. React知识点总结1

    最近打算把react知识点总结下: React特点 1.虚拟DOM 在内存中操作DOM,在内存中创建数据结构,只会更新有差异的地方 2.组件化 页面分成若干个组件,每个组件包含逻辑结构和样式 组件仅包 ...

  9. PHP存储blob示例(转)

    原文:http://www.mysqltutorial.org/php-mysql-blob/ <?php /* CREATE TABLE files ( id INT AUTO_INCREME ...

  10. JS原型和继承

    //所有的函数都有一个prototype属性 function aa() { } console.info(aa.prototype); //这个prototype属性引用了一个对象,即原型,初始化时 ...