Android ListView和Adapter数据适配器的简单介绍

ListView

显示大量相同格式数据

常用属性:

  1. listSelector listView每项在选中、按下等不同状态时的Drawable
  2. divider ListView每项间的间隔Drawable
  3. dividerHeight ListView每项间间隔的间隔高度

常用方法:

  1. setAdapter() 设置数据适配器
  2. setOnItemClickListener() 设置每项点击事件监听
  3. addHeaderView() 添加头视图
  4. addFooterView() 添加脚视图
  5. setEmptyView() 设置数据项为0时的空数据视图

监听事件

这个监听的例子是设置了一个头视图 项的下标改变 所以用 position-listview.getHeaderViewsCount() 计算项的下标位置 获取正确的对象

Adapter数据适配器 将各种数据以合适的形式绑定到控件上 像listview,gridview,spinner 等等等控件 都会用到Adapter绑定数据

介绍三种Adapter

  1. ArrayAdapter:支持泛型操作,最简单的一个Adapter,只能展现一行文字
  2. SimpleAdapter:同样具有良好扩展性的一个Adapter,可以自定义多种效果
  3. BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter

先从简单的介绍

1.ArrayAdapter

参数1:当前上下文环境

参数2:android.R.layout.simple_list_item_1

是android自带的一个简单布局 里面只包含一个id为text1的TextView 也就是参数3 ArrayAdapter只能显示一行数据 显示文本信息 使用这个系统提供的布局就可以

android系统还给我们提供了其他一些好用的模板

  1. simple_list_item_1: 单独一行的文本框
  2. simple_list_item_2: 两个文本框组成
  3. simple_list_item_checked: 每项都是由一个已选中的列表项
  4. imple_list_item_multiple_choice: 都带有一个复选框
  5. simple_list_item_single_choice: 都带有一个单选钮

参数4:绑定的数据 这里使用是string数组 上面提到过ArrayAdapter支持泛型 也可以绑定一个list

显示效果 绑定了listview

2.SimpleAdapter

simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等

显示结果

这里引用的布局是系统默认simple_list_item_2

listView项显示的效果是根据你的布局显示的,你想写的多炫酷叼都可以

3.BaseAdapter

BaseAdapter是开发中最常用的适配器ArrayAdapter,SimpleAdapter都继承于BaseAdapter。BaseAdapter可以完成自己定义的Adapter,可以将任何复杂组合的数据和资源,以任何你想要的显示效果展示给大家。

继承BaseAdapter之后,需要重写以下四个方法:getCount,getItem,getItemId,getView。

系统在绘制ListView之前,将会先调用getCount方法来获取Item的个数。每绘制一个Item就会调用一次getView方法,在getView中引用事先定义好的layout布局确定显示的效果并返回一个View对象作为一个Item显示出来。

这两个方法是自定ListView显示效果中最为重要的,同时只要重写好了这两个方法,ListView就能完全按开发者的要求显示。而getItem和getItemId方法将会在调用ListView的响应方法的时候被调用到。

自定义布局文件(listview的项的显示效果)

<?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">

  <ImageView
    android:id="@+id/image_photo"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:padding="10dp"/>
  <TextView
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20dp"
    android:layout_toRightOf="@id/image_photo"/>
  <TextView
    android:id="@+id/age"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20dp"
    android:layout_toRightOf="@id/image_photo"
    android:layout_below="@id/name"
    android:layout_marginTop="10dp"/>
</RelativeLayout>

student学生类

public class Student {
  private String name;
  private int age;
  private int photo;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public int getPhoto() {
    return photo;
  }

  public void setPhoto(int photo) {
    this.photo = photo;
  }
}

MainActivity

public class MainActivity extends AppCompatActivity {

  private ListView listView;
  //自定义BaseAdapter
  private MyAdapter adapter;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView= (ListView) findViewById(R.id.listview);
    List<Student> stuList=new ArrayList<>();
    for(int i=0;i<10;i++){
      Student stu=new Student();
      stu.setAge(10+i);
      stu.setName("name"+i);
      stu.setPhoto(R.mipmap.ic_launcher);
      stuList.add(stu);
    }
      
    adapter=new MyAdapter(stuList,MainActivity.this);
    listView.setAdapter(adapter);
  }

MyAdapter

public class MyAdapter extends BaseAdapter {

  private List<Student> stuList;
  private LayoutInflater inflater;
  public MyAdapter() {}

  public MyAdapter(List<Student> stuList,Context context) {
    this.stuList = stuList;
    this.inflater=LayoutInflater.from(context);
  }

  @Override
  public int getCount() {
    return stuList==null?0:stuList.size();
  }

  @Override
  public Student getItem(int position) {
    return stuList.get(position);
  }

  @Override
  public long getItemId(int position) {
    return position;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    //加载布局为一个视图
    View view=inflater.inflate(R.layout.layout_student_item,null);
    Student student=getItem(position);
    //在view视图中查找id为image_photo的控件
    ImageView image_photo= (ImageView) view.findViewById(R.id.image_photo);
    TextView tv_name= (TextView) view.findViewById(R.id.name);
    TextView tv_age= (TextView) view.findViewById(R.id.age);
    image_photo.setImageResource(student.getPhoto());
    tv_name.setText(student.getName());
    tv_age.setText(String.valueOf(student.getAge()));
    return view;
  }

显示结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android自定义Adapter的ListView的思路及代码

    在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快捷方式.例如ArrayAdapter.SimpleAdapter和SimpleCursorAdapter等.但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位.假设一行里面有一个按钮和一个图片控件,它们之间的响应操作是不一样的.若采用系统自带的适配器,就不能精确到每个控件的响应事件.这时,我们一般采取自定义适配器来实现这个比较精确地请求. ListView

  • android开发中ListView与Adapter使用要点介绍

    1. Adapter.getView() public View getView(int position, View convertView , ViewGroup parent){...} 这个方法就是用来获得指定位置要显示的View.官网解释如下: Get a View that displays the data at the specified position in the data set. You can either create a View manually or infl

  • Android Adapter里面嵌套ListView实例详解

    Android Adapter里面嵌套ListView实例详解 前言: 可嵌套~但是显示需要特殊处理下~以下是处理方法 前几天因为项目的需要,要在一个ListView中放入另一个ListView,也即在一个ListView的每个ListItem中放入另外一个ListView.但刚开始的时候,会发现放入的小ListView会显示不完全,它的高度始终有问题.上网查了下,发现别人也有遇到这样的问题,而大多数人都不推荐这样的设计,因为默认情况下Android是禁止在ScrollView中放入另外的Scr

  • Android开发中ListView自定义adapter的封装

    [引入] 我们一般编写listView的时候顺序是这样的:  •需要展示的数据集List<T>  •为这个数据集编写一个ListView  •为这个ListView编写一个Adapter,一般继承自BaseAdapter  •在BaseAdapter内部编写一个ViewHolder类,对应ListView里面的item控件,提高控件的查询效率 分析: List<T>:ListView --> Adapter extends BaseAdapter --> ViewHol

  • Android开发实现ListView和adapter配合显示图片和文字列表功能示例

    本文实例讲述了Android开发实现ListView和adapter配合显示图片和文字列表功能.分享给大家供大家参考,具体如下: 实际效果: 布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sc

  • Android ListView自定义Adapter实现仿QQ界面

    PS:listview中有一些简单使用的适配器,如:SimpleAdapter:构造方法SimpleAdapter(Context context,List<Map<String,?>> data,reString [] from,int [] to),但这种适配器过于单调,往往不能达到用户想要的效果,想要随心所欲,就用到了BaseAdapter,自定义适配器. 如图: 1.首先写布局文件 activity_layout.xml <?xml version="1.0

  • Android ListView适配器(Adapter)优化方法详解

    Android ListView的优化,在做Android项目的时候,在用到ListView 界面及数据显示,这个时候如果资源过大,对项目来说,用户体验肯定是不好的,这里就对如何优化做了详细介绍: Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View.想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源? ListView的Adapter的作用如下图所示: 先看看下面

  • Android listview与adapter详解及实例代码

    一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView就是实现这个功能的.第二点也不难做到,在后面的学习中读者会发现,这非常简单. 一个ListView的创建需要3个元素. (1)ListView中的每一列的View. (2)填入View的数据或者图片等. (3)连接数据与ListView的适配器. 也就是说,要使用ListView,首先要了解什么是适配器.适配器是一个连接数据和AdapterView(ListView就

  • Android UI:ListView - SimpleAdapter实例详解

    Android UI:ListView -- SimpleAdapter SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局,而且使用很方便. layout : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layo

  • Android ListView和Adapter数据适配器的简单介绍

    ListView 显示大量相同格式数据 常用属性: listSelector listView每项在选中.按下等不同状态时的Drawable divider ListView每项间的间隔Drawable dividerHeight ListView每项间间隔的间隔高度 常用方法: setAdapter() 设置数据适配器 setOnItemClickListener() 设置每项点击事件监听 addHeaderView() 添加头视图 addFooterView() 添加脚视图 setEmpty

  • Android入门之Adapter的简单使用教程

    目录 Adapter介绍 课程目标 Adapter介绍 开始进入高级一些的组件的讲解了,后面章节会大量使用到ListView,在讲ListView前就必须带着这个Adapter的概念去做讲解. Adapter其实就是MVC的概念, 举个例子:大型的商业程序通常由多人一同开发完成,比如有人负责操作接口的规划与设计, 有人负责程序代码的编写如果要能够做到程序项目的分工就必须在程序的结构上做适合的安排. 上面就是Adapter以及继承结构图了,接着我们介绍一下实际开发中还用到的几个Adapter吧!

  • Android ListView与RecycleView的对比使用解析

    ListView,就如其名,是用来显示列表的一种View,而RecycleView,是其的加强版,今天带来的是这两个几乎具有相同的功能的对比使用 先从ListView说起吧 ListView: 1.在布局文件中使用ListView,并为其定义一个id,方便我们之后的调用,宽高与父控件相同 2.准备数据,将数据添加到ArrayAdapter适配器当中 3.在Activity的java文件中使用findviewbyid找到ListView实例,为其设置Adapter 4.实现ListView的ite

  • Android ListView万能适配器实例代码

    ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的Adapter继承于BaseAdapter,下面是自定义的Adapter,精华在getView()方法中 package com.example.mylistview.util; import java.util.List; import android.content.Context; impor

  • Android中ListView设置静态数据的方法

    有的时候我们需要为一个listview设置固定的数据,下边就是如何设置静态的数据,之前先给大家看一看效果图: 布局文件listview 的主页面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="matc

  • Android ListView数据的分批显示功能

    Android ListView数据的分批显示 布局文件activity_call_safe2.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" androi

随机推荐