一. 概述:

      在Android应用开发中,AdapterView是一类常用且非常重要的组件。我们常见的以列表的形式显示信息的组件就是AdapterView的子类,称为Listview;我们经常以网格方式浏览图片缩略图的组件也是AdapterView的子类,被称为GridView;以下拉列表形式显示可选项的组件也是AdapterView的子类,称为Spinner;还有等等它们都是AdapterView的子类。

二. 介绍AdapterView的编程模式:

     用Android的ListView组件以列表显示Android系统中已经安装的所有程序信息。ListView,顾名思义,就是通过列表的形式向用户展示信息。就像你手机设置里面的列表,它包含了你所有应用程序的图标, 应用程序名称(类似下图)和入口Activity的类名。当显示的内容超出物理屏幕可用区域时,它还可以进行滚动,就跟上期我们说的ScrollView的效果一样

       如下图:黄色大框的部分是一个ListView,深蓝色小框框住的部分是一个列表中的一个列表项,因此在程序中要使用ListView显示信息,必须要做一下的工作。

(1)在界面布局中包含一个ListView组件

(2)对在列表中显示的列表项进行布局

(3)设计一个实现了Adapter接口的类,用于为ListView组件提供需要显示的数据。

Adapter:

刚刚提到的列表组件(ListView),网格组件(GridView)和下拉列表组件(Spinner),它们都是Adapter的子类,这些组件只负责显示数据,而对于这些要显示的数据则必须通过称为Adapter的接口来进行管理。以使用ListView显示数据为例,AdapterView和Adapter接口的关系如下图:

Adapter常用方法及其含义:

方法名字 含义
int getCount() 返回要显示的数据集中的数据总数
Object getItem(int position) 返回数据集中指定位置的数据对象
long getItemId(int position) 返回数据集中指定位置的数据的ID

View getView(int position,

View convertView,

ViewGroup parent)

将指定位置的数据构建成一个可以显示在AdapterView中的组件,并返回AdapterView进行显示

ListView使用:

activity_main.xml 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:stretchColumns="2"><ListViewandroid:id="@+id/lv1"android:layout_width="match_parent"android:layout_height="match_parent" /></RelativeLayout>

选择New→Layout resoure file 创建

 item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:stretchColumns="2"><ListViewandroid:id="@+id/lv1"android:layout_width="match_parent"android:layout_height="match_parent" /></RelativeLayout>

 myAdapater.java

package com.example.demo03_22;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;public class myAdapater extends BaseAdapter {private String[] books={"Java程序设计","Android应用开发","oracle数据库管理指南","JavaWeb程序设计","软件工程之系统工程师之路"};LayoutInflater inflater;int id_item;public myAdapater(Context context,int id_item){this.id_item=id_item;inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}@Overridepublic int getCount() {return books.length;}@Overridepublic Object getItem(int i) {return books[i];}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {TextView tv;tv=(TextView) inflater.inflate(id_item,viewGroup,false);tv.setText(books[i]);return tv;}
}

MainActivity.java

package com.example.demo03_22;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.ListView;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView lv=(ListView) this.findViewById(R.id.lv1);myAdapater myAdapater=new myAdapater(this, R.layout.item);lv.setAdapter(myAdapater);}
}

测试结果:

 改进:添加图片

activity_main.xml 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:stretchColumns="2"><ListViewandroid:id="@+id/lv1"android:layout_width="fill_parent"android:layout_height="wrap_content" /></RelativeLayout>

 item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/id_booknames"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><ImageViewandroid:id="@+id/book_phone"android:layout_width="80dp"android:layout_height="80dp"/><TextViewandroid:id="@+id/book_name"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_vertical"/></LinearLayout>

 myAdapater.java

package com.example.demo03_22;import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;public class myAdapater extends BaseAdapter {private BookItem[] books={new BookItem("陈某人",R.drawable.dog),new BookItem("周某人",R.drawable.dog),new BookItem("钟某人", R.drawable.dog),new BookItem("林某人",R.drawable.dog),new BookItem("涛某人",R.drawable.dog)};LayoutInflater inflater;int id_item;public myAdapater(Context context,int id_item){this.id_item=id_item;inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}@Overridepublic int getCount() {return books.length;}@Overridepublic Object getItem(int position) {return books[position];}@Overridepublic long getItemId(int position) {return position;}@SuppressLint("ViewHolder")@Overridepublic View getView(int position, View view, ViewGroup parent) {LinearLayout LL=(LinearLayout)inflater.inflate(id_item,parent,false);ImageView iv=(ImageView)LL.findViewById(R.id.book_phone);iv.setImageResource(books[position].photo);TextView tv;tv=(TextView)LL.findViewById(R.id.book_name);tv.setText(books[position].name);return LL;}
/***  定义一个图片类*/private class BookItem{String name;int photo;public BookItem(String name,int photo){this.name=name;this.photo=photo;}}
}

MainActivity.java

package com.example.demo03_22;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView lv=(ListView) this.findViewById(R.id.lv1);myAdapater myAdapater=new myAdapater(this, R.layout.item);lv.setAdapter(myAdapater);lv.setOnItemClickListener(this);}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {TextView textView=(TextView)view.findViewById(R.id.book_name);String name=(String)textView.getText();String text="确定选择"+name+"今晚打火锅吗";Toast.makeText(this,text,Toast.LENGTH_LONG).show();}
}

【Android容器组件—AdapterView】相关推荐

  1. 【Android容器组件—LinearLayout】

    一.  概述 LinearLayout是线性布局组件,放置在其中的组件按列或者按行(就是垂直或者水平)的方式排序分布. 二. 常用XML配置属性 (1) android:orientation 设置L ...

  2. 【Android容器组件—ScrollView】

    一. 概述 ScrollView也是一个容器,它是FrameLayout的子类,它的主要作用就是将超出物理屏幕的内容显示出来,(就是滚动条效果)ScrollView提供垂直滚动,进而可将超出物理屏幕的 ...

  3. Android Jetpack组件之Navigation使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  4. Android——四大组件、六大布局、五大存储

    一.android四大组件 (一)android四大组件详解 Android四大组件分别为activity.service.content provider.broadcast receiver. 1 ...

  5. 淘宝开源Android容器化框架Atlas开发者指南

    Atlas 由阿里巴巴移动团队自研,以容器化思路解决大规模团队协作问题,实现并行开发.快速迭代和动态部署,适用于 Android 4.x 以上系统版本的大小型 App 开发. 该框架于2017年3月1 ...

  6. XCoreRedux框架:Android UI组件化与Redux实践

    XCoreRedux框架:Android UI组件化与Redux实践 @author: 莫川 https://github.com/nuptboyzhb/ XCoreRedux源码+Demo:http ...

  7. Android 四大组件 与 MVC 架构模式

    作为一个刚从JAVA转过来的Android程序员总会思考android MVC是什么样的? 首先,我们必须得说Android追寻着MVC架构,那就得先说一下MVC是个啥东西! 总体而来说MVC不能说是 ...

  8. Flutter学习笔记(10)--容器组件、图片组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...

  9. android的四大组件及使用场景,Android/四大组件/Activity.md · BoraxZYF/AndroidInterview - Gitee.com...

    ## 四大组件 ## Activity ### Activity 的四种启动模式及使用场景 - standard 标准模式,Activity 的默认启动模式.每次启动一个 Activity 时都会创建 ...

  10. android图片显示组件,Android可循环显示图像的Android Gallery组件用法实例

    本文实例分析了Android可循环显示图像的Android Gallery组件用法.分享给大家供大家参考,具体如下: Gallery组件主要用于横向显示图像列表,不过按常规做法.Gallery组件只能 ...

最新文章

  1. 如何在代码里配置-D 参数?
  2. VBS脚本常用经典代码收集
  3. 王者齐聚!Unite 2017 Shanghai 日程讲师全揭晓
  4. java it_关于 Java Iterator(迭代器)学习笔记
  5. 将Android手机打造成你的Python开发者桌面#华为云·寻找黑马程序员#
  6. 实时Web与WebSocket实践
  7. excel数据导入到 mysql 中
  8. ❄️全网最详细的Python入门基础教程,Python最全教程(非常详细,整理而来)
  9. Mirth Connect 第三章 创建通道
  10. 名师工作室php,名师工作室
  11. NCBI中Entrez Direct的使用
  12. 今日头条推荐算法原理全文详解之三
  13. “数字孪生”语境下的城市:拼图模式与航向之争
  14. 2020你还在烦恼网络硬盘选择吗?分享50个免费的云盘网盘服务——拥有无限储存空间
  15. 瑞神要考研(山东科技大学第四届ACM校赛)
  16. Java实现伪造邮件发信人
  17. angularJS 组件及内置过滤器
  18. 刷机相关的Android的安全
  19. Kali Win-KeX SL
  20. MySQL8.0安装教程,在Linux环境安装MySQL8.0教程,最新教程 超详细

热门文章

  1. 安川机器人外部信号怎么接线_安川机器人通用输入输出信号定义.pdf
  2. 【其他】电脑ADB连接手机的方式
  3. 微信小程序跳转外部链接
  4. “一键淘宝”将淘宝网店免费转移到手机客户端教程
  5. esxi安装威联通_威联通折腾篇三:Virtualization Station 安装虚拟机
  6. 《统计学》第八版贾俊平第八章假设检验知识点总结及课后习题答案
  7. 屏幕坐标转换成threejs的坐标
  8. 【学习笔记】常见的激励函数和损失函数
  9. faster rcnn 计算mAP
  10. python下载网页上的pdf文件_利用Python把网页内容转换为pdf格式文件,批量下载到本地!...