• Android学习笔记 2.5.1 Adapter接口及实现类 && 2.5.2 实例——使用ArrayAdapter创建ListView


    Android学习笔记

    疯狂Android讲义

    第2章 Android 应用的界面编程

    2.5 第4组 UI组件:AdapterView及其子类

    AdapterView是一组重要的组件,AdapterView本身是一个抽象基类,它派生的子类在用法上十分相似,只是显示界面有一定的区别。

    Adapter View具有如下特征:

    • AdapterView继承了ViewGroup,它的本质是容器。
    • AdapterView可以包括多个“列表项”,并将多个“列表项”以合适的形式显示出来
    • AdapterView显示的多个“列表项”由Adapter提供。调用AdapterView的setAdapter(Adapter)方法设置 Adapter即可。

    AdapterView及其子类的继承关系:

    在这里插入图片描述

    2.5.1 Adapter接口及实现类

    Adapter本身只是一个接口,它派生了 ListAdapter和 SpinnerAdapter
    两个子接口,其中ListAdapter为AbsListView提供列表项,而SpinnerAdapter为AbsSpinner提供列表项。Adapter接口及其实现类的继承关系:

    在这里插入图片描述

    Adapter常用的实现类:

    • ArrayAdapter:简单、易用的Adapter,通常用于将数组或List集合的多个值包装成多个列表项。
    • SimpleAdapter:并不简单、功能强大的Adapter,可用于将List集合的多个对象包装成多个列表项。
    • SimpleCursorAdapter:与SimpleAdapter基本相似,只是用于包装 Cursor提供的数据。
    • BaseAdapter:通常用于被扩展。扩展BaseAdapter可以对各列表项进行最大限度的定制。
    2.5.2 实例——使用ArrayAdapter创建ListView

    创建新项目

    在这里插入图片描述

    主布局

    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        
        <ListView
            android:id="@+id/list1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:divider="#f00"
            android:dividerHeight="1dp"
            android:headerDividersEnabled="false" />
    
        
        <ListView
            android:id="@+id/list2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:divider="#0f0"
            android:dividerHeight="1dp"
            android:headerDividersEnabled="false" />
    
    
    LinearLayout>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    array_item.xml

    
    <TextView
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/TextView"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"   
       android:textSize="24dp"
       android:padding="5dp"
       android:shadowColor="#f0f"
       android:shadowDx="4"
       android:shadowDy="4"
       android:shadowRadius="2"/>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    checked_item.xml

    
    <CheckedTextView
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/TextView"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"   
       android:textSize="24sp"
       android:checkMark="@drawable/ok"
       android:shadowColor="#f0f"
       android:shadowDx="4"
       android:shadowDy="4"
       android:shadowRadius="2"/>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    逻辑代码

    通过Adapter提供列表项

    package com.dingjiaxiong.adapterviewtest;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ListView list1 = findViewById(R.id.list1);
            //定义一个数组
            String[] arr1 = new String[]{"孙悟空","猪八戒","牛魔王"};
            ArrayAdapter adapter1 = new ArrayAdapter(this,R.layout.array_item,arr1);
    
            //为listview设置adapter
            list1.setAdapter(adapter1);
    
            ListView list2 = findViewById(R.id.list2);
            //定义一个数组
            String[] arr2 = new String[]{"Java","Hibernate","Spring","Android"};
            //将数组包装为ArrayAdapter
            ArrayAdapter adapter2 = new ArrayAdapter(this,R.layout.checked_item,arr2);
            //为listview设置adapter
            list2.setAdapter(adapter2);
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    ArrayAdapter参数:

    • Context:它代表了访问整个Android应用的接口。几乎创建所有组件都需要传入 Context对象。
    • textViewResourceld:一个资源ID,,该资源ID代表一个TextView,该TextView组件将作为ArrayAdapter的列表项组件。
    • 数组或List:该数组或List将负责为多个列表项提供数据。

    运行效果

    在这里插入图片描述

  • 相关阅读:
    windows系统下,C++统计进程内存使用情况
    代码部署git实践,shell教程,截图复制工具
    【DRAM存储器十三】DDR介绍-功能框图和模式寄存器解析
    C3P0连接池+MySQL的配置以及wait_timeout问题的解决
    【PostgreSQL-14版本snapshot的几点优化】
    “信任机制”才是数字化时代发展中的精髓所在
    动手学深度学习(Pytorch版)代码实践 -深度学习基础-02线性回归基础版
    SpringMVC和实际案例
    深度学习Tensorflow: CUDA_ERROR_OUT_OF_MEMORY解决办法
    docker版本的Jenkins安装与更新技巧
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126458934