本文将介绍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. JS-为金额添加千分位逗号分割符

    前言:这个功能在前端页面中使用的还是比较多的,正好我们的项目中也有使用此功能,不过YY同学写的代码不像个方法的样子,一个入口中间又插了几道子,所             以,我写了下面这个方法,经过测 ...

  2. 关于Core Animation(转载部分内容)

    读者在浏览技术博客的时候,看到一篇关于Core Animation的介绍,觉得挺有用的,想分享给大家.原作者不知道是谁,嘿,所以就先不标注了,如有冒犯敬请原谅.不过笔者从中摘录部分内容分享一下. 其中 ...

  3. jmeter上传文件搞了一天,才搞定,没高人帮忙效率就是低,赶紧记下来,以备后用

    先用谷歌浏览器抓包,抓到的包类似这样: 在jmeter里添加一个http请求,配置好参数,方法,端口,路径等, 勾选 在“同请求一起发送参数”里填写上面抓包的部分数据: 分别对应录入,勾选“编码” 我 ...

  4. Android开发--页面切换

    1.创建android项目.项目文档如下 2.activity_main布局,Androidv4包里自带的,既然是自带的那么直接拿来用就可以了,当然前提是你得工程里有v4包 <LinearLay ...

  5. mongodb 的备份恢复导入与导出

    导入导出 use hndb; db.s.save({name:'李四',age:18,score:80,address:'郑州'}); db.s.save({name:'李三',age:8,score ...

  6. VUE 入门笔记

    前端的MVVM概念今年来也算是如火如荼,了解完 MVVM的概念,也该找个去尝试下 首先我先试了下 国内小而美的 VUE 试着照着文档敲出入门文件,内容都在注释里 <!doctype html&g ...

  7. ---Shell的数组遍历

    1.  一一读入:  read -a A < <(echo a b c d e f g) 2. 遍历输出

  8. gfw列表

    https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

  9. Spring pom配置详解

    转载至http://blog.csdn.net/ithomer/article/details/9332071# 原博主注释的很详细 <project xmlns="http://ma ...

  10. http协议get、post请求分析及用HttpRequester测试的报错及可能原因

    1.get.post区别 Get Post 获取/提交数据 主要获取数据,不修改数据 主要提交数据,可修改数据 是否需要form表单 不一定 需要 安全性 查询字符串会显示在地址栏的URL中,不安全. ...