本文将介绍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. Robotium怎样判断测试结果

    Robotium判断测试结果的方法主要有三类:assert.is.search.assert方法除了Robotium API,还有Junit中的所有断言方法,Junit的断言方法下篇详解. void ...

  2. 2016-11-02: boost::enable_shared_from_this

    使用场景 当类对象被shared_ptr管理时,需要在类自己定义的函数中把当前对象作为参数传递给其他函数时,必须传递一个shared_ptr,否则就不能保持shared_ptr管理这个类对象的语义.因 ...

  3. 用ionic快速开发hybird App(已附源码,在下面+总结见解)

    1.ionic简介 ionic 是用于敏捷开发APP的解决方案.核心思路是:利用成熟的前端开发技术,来写UI和业务逻辑.也就是说,就是一个H5网站,这个区别于react-native,native.即 ...

  4. C#笔试(程序设计)

    1.如何把一个Array复制到ArrayList里,如何把ArrayList复制到Array里? foreach( object o in array )arrayList.Add(o); Array ...

  5. Electronic Payment App analysis

    Electronic Payment App is getting more and more popular now. People don't have to bring credit cards ...

  6. STL迭代器之一:偏特化

    在stl的算法中运用容器的迭代器时,很可能经常会用到迭代器相应型别(例如迭代器所指物的型别),假设算法中有必要声明一个变量,以"迭代器所指对象的型别"为类型,如何是好,例如我们写一 ...

  7. 关于html自闭合标签要不要加空格和斜杠的问题?

    问题描述:可能很多人都遇到过这个问题,写网页时,link img br input等等这些标签时到底要不要在结尾加上空格和斜杠呢? 我曾经貌似在<编写高质量代码>上看到过这样的介绍,遇到l ...

  8. dell omsa 监控,Nrpe信号量泄露

    ipcs -s | awk '/nrpe/ {print "ipcrm -s ",$2} ' | sh /etc/init.d/dataeng stop /etc/init.d/d ...

  9. asp.net的JSONHelper 类

    调用方法: ){    jsons = json.ToString();}else{    jsons = @"{success:false}";}return jsons; JS ...

  10. Python-os

    os.listdir(path)返回一个list,其中包括该目录下所以文件和文件夹的名字,是str格式.ex.['file_1.ext','folder_name'] file_name, exten ...