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

 更新时间:2018年04月19日 13:48:17   作者:S丶black  
这篇文章主要介绍了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;
  }

显示结果

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

相关文章

  • android关于按钮点击效果实现的方法

    android关于按钮点击效果实现的方法

    今天小编就为大家分享一篇关于android关于按钮点击效果实现的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Android的APK应用签名机制以及读取签名的方法

    Android的APK应用签名机制以及读取签名的方法

    这篇文章主要介绍了Android的APK应用签名机制以及读取签名的方法,这里作者推荐使用Java自带的API进行APK签名的读取,需要的朋友可以参考下
    2016-02-02
  • Kotlin Job启动流程源码层深入分析

    Kotlin Job启动流程源码层深入分析

    如果要我拿现实中的一事物与Kotlin协程中的Job做一个类比,那么我会把Job比作成海洋中的冰山。自由漂浮的冰山约有90%体积沉在海水表面下,因此看着浮在水面上的形状并猜不出水下的形状
    2022-11-11
  • Android重复引用多个场景报错的问题解决

    Android重复引用多个场景报错的问题解决

    本文主要介绍了Android重复引用多个场景报错的问题解决,主要介绍了5种情况,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • android自定义Dialog弹框和背景阴影显示效果

    android自定义Dialog弹框和背景阴影显示效果

    这篇文章主要为大家详细介绍了android自定义Dialog弹框和背景阴影显示效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Android仿ios年龄、生日、性别滚轮效果

    Android仿ios年龄、生日、性别滚轮效果

    这篇文章主要为大家详细介绍了Android仿ios年龄、生日、性别滚轮效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Android实现炫酷的网络直播弹幕功能

    Android实现炫酷的网络直播弹幕功能

    这篇文章主要为大家详细介绍了Android仿网络直播弹幕功能的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android开发之TabHost选项卡及相关疑难解决方法

    Android开发之TabHost选项卡及相关疑难解决方法

    这篇文章主要介绍了Android开发之TabHost选项卡及相关疑难解决方法,结合实例形式较为详细的分析了Android开发中TabHost选项卡的常见用法以及相关疑难问题解决方法,需要的朋友可以参考下
    2019-03-03
  • Android处理时间各种方法汇总

    Android处理时间各种方法汇总

    这篇文章主要汇总了Android处理时间的各种方法,如何获取当前时间,日期之间的比较,如何计算两段日期的重合日期等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android 下调试手机截屏的方法

    Android 下调试手机截屏的方法

    这篇文章主要介绍了Android 下调试手机截屏的方法的相关资料,希望通过本文大家能掌握这样的功能,需要的朋友可以参考下
    2017-09-09

最新评论