说到列表视图,不难联想到前面提到过的数组适配器,但是数组适配器只能搭建文本选择项,扩展能力并不强,Android提供了一种适应性更强的基本适配器BaseAdapter,该适配器允许开发者在别的代码中进行逻辑处理,下面以Spinner为载体,演示如何使用BaseAdapter,具体分为以下三步:

(1)编写列表项的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"> <!--这是显示行星图片的图像视图 -->
<ImageView
android:id="@+id/iv_icon"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/> <LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:orientation="vertical"> <!--这是显示行星名称的文本视图 -->
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="left|center"
android:textColor="#000"
android:textSize="20sp"
/>
<!--这是显示行星描述的文本视图 -->
<TextView
android:id="@+id/tv_desc"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:gravity="left|center"
android:textColor="#000"
android:textSize="13sp"/> </LinearLayout>
</LinearLayout>

(2)写个新的适配器继承BaseAdapter,实现对列表项视图的获取和操作

public class PlanetListArrayAdapter extends BaseAdapter {

    private Context mContext;//声明一个上下文对象
private ArrayList<Planet> mPlanetList; //声明一个行星信息队列 //行星适配器的构造函数,传入上下文与行星队列
public PlanetListArrayAdapter(Context context,ArrayList<Planet> planet_list){
mContext=context;
mPlanetList=planet_list;
} //获取列表项的个数
@Override
public int getCount() {
return mPlanetList.size();
} //获取列表项数据
@Override
public Object getItem(int i) {
return mPlanetList.get(i);
} //获取列表项编号
@Override
public long getItemId(int i) {
return i;
} //获取指定位置的列表项视图
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder;
if(view==null){//转换视图为空
holder=new ViewHolder();
//根据布局文件item_list.xml生成转换视图对象
view= LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
holder.iv_icon= (ImageView) view.findViewById(R.id.iv_icon);
holder.tv_name= (TextView) view.findViewById(R.id.tv_name);
holder.tv_desc= (TextView) view.findViewById(R.id.tv_desc);
//将视图持有者保存到转换视图中
view.setTag(holder);
}else{//转换视图非空
//从转换视图中获取之前保存的视图持有者
holder=(ViewHolder)view.getTag();
}
Planet planet=mPlanetList.get(i);
holder.iv_icon.setImageResource(planet.image);//显示行星的图片
holder.tv_name.setText(planet.name);//显示行星的名称
holder.tv_desc.setText(planet.desc);//显示行星的描述
return view;
} public class ViewHolder{
public ImageView iv_icon;
public TextView tv_name;
public TextView tv_desc;
}
}

(3)在页面代码中构造该适配器,并应用于Spinner对象

private ArrayList<Planet> planetList;//声明一个行星队列

    //初始化行星列表的下拉框
private void initPlanetSpinner(){
//获取默认的行星队列,即水金地火木土
planetList=Planet.getDefaultList();
//构建一个行星列表的适配器
PlanetListArrayAdapter adapter=new PlanetListArrayAdapter(this,planetList);
//从布局文件中获取名叫sp_planet的下拉框
Spinner sp=findViewById(R.id.sp_planet);
//设置下拉框的标题
sp.setPrompt("请选择行星");
//设置下拉框的列表适配器
sp.setAdapter(adapter);
//设置下拉框默认显示第一项
sp.setSelection(0);
//给下拉框设置选择监听器,一旦用户选中某一项,就触发onItemSelected方法
sp.setOnItemClickListener(new MySelectedListener);
} private class MySelectedListener implements AdapterView.OnItemSelectedListener{ //选择时间的处理方法,其中i代表选择项的序号
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this,"您选择的是:"+planetList.get(i).name,Toast.LENGTH_LONG).show();
} //未选择的事件处理方法,通常无需关注
@Override
public void onNothingSelected(AdapterView<?> adapterView) { }
}

Android列表类视图之基本适配器BaseAdapter的更多相关文章

  1. android中的万能适配器BaseAdapter的总结

    有时候,列表不光会用来做显示用,我们同样可以在在上面添加按钮.添加按钮首先要写一个有按钮的xml文件,然后自然会想到用上面的方法定义一个适配器,然后将数据映射到布局文件上.但是事实并非这样,因为按钮是 ...

  2. Android必学之数据适配器BaseAdapter

    什么是数据适配器? 下图展示了数据源.适配器.ListView等数据展示控件之间的关系.我们知道,数据源是各种各样的,而ListView所展示数据的格式则是有一定的要求的.数据适配器正是建立了数据源与 ...

  3. Android开发 ListView(垂直滚动列表项视图)的简单使用

    效果图: 使用方法: 1.在布局文件中加入ListView控件: <?xml version="1.0" encoding="utf-8"?> &l ...

  4. Android列表视图(List View)

    Android列表视图(ListView) ListView是一个显示滚动项列表的示视图组(viewgroup),通过使用适配器(Adapter)把这些列表项自动插入到列表中.适配器比如从一个数组或是 ...

  5. Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式

    Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式 Fragment FragmentManager frag ...

  6. 【Android自学日记】两种适配器的使用

    ArrayAdapter适配器: (1)用于显示基本的文字内容 (2)基本使用过程:新建适配器---创建或加载数据源---适配器加载数据源---视图加载适配器 ArrayAdapter(上下文,当前L ...

  7. Android——列表选择框(Spinner)

    通常情况下,如果列表选择框中要显示的列表项是可知的,那么可以将其保存在数组资源文件中,然后通过数组资源来为列表选择框指定列表项.这样就可以在不编写Java代码的情况下实现一个下拉选择框. 1.在布局文 ...

  8. Android列表控件ListView详解

    ListView绝对可以称得上是Android中最常用的控件之一,几乎所有应用程序都会用到它. 由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候 ...

  9. Android常用控件之GridView使用BaseAdapter

    我们可以为GridView添加自定义的Adapter,首先看下用自定义Adapter的显示效果 在布局文件main.xml文件中定义一个GridView控件 <RelativeLayout xm ...

随机推荐

  1. 图像数组运算相关问题(nan/inf)

    新年第一更!祝愿新的一年技术长足进步哈! 最近在用sklearn的回归分析模型拟合预测遥感图像,遇到了一些问题,好在一一解决,现在总结一下. 1.首先输入sklearn的数据必须reshape(-1, ...

  2. springboot 日志 logback输出

    1.首先在 application,yaml中添加 logging: config: classpath:logback-spring.xml 2.之后在resources中添加 logback-sp ...

  3. web访问 FastDFS 方法思路

           由于余老师在 V4.05 以后的版本就把内置 HTTP服务去掉了,所以就算这篇你测试上传成功了,你也访问不了. 推荐大家结合 Nginx 使用 fastdfs-nginx-module ...

  4. Centos7 LVM扩容实例

    Centos7 lvm 扩容与以往版本有所不同   1.插入硬盘,我是在虚拟机上做的测试  直接添加一块5G的硬盘   2.系统读取硬盘信息     # echo "- - -" ...

  5. ASP.NET Core ResponseCache进行缓存操作

    前言 本章将介绍客户端缓存将介绍浏览器缓存和服务端缓存,使用浏览器缓存将减少对web服务器的请求次数,同时可以提升性能,避免重复的运算浪费. ASP.NET Core对于HTTP缓存分为两种: 客户端 ...

  6. Idea生成代码段

    使用快捷键(ctrl+alt+s)找到:从idea的菜单File->Settings->Editor->Live Templates 先添加Template Group,然后添加Li ...

  7. 基于BTrace监控调试Java代码

    BTrace是Java的一个动态代码追踪工具,通过编写btrace脚本,它可以动态的向目标应用程序的字节码注入追踪代码,通过修改字节码的方式,达到监控调试和定位问题的目的,是解决线上问题的利器. BT ...

  8. Dijkstra算法 1

    // Dijkstra算法,适用于没有负边的情况 // 注意:是没有负边,不是没有负环 // 在这一条件下,可以将算法进行优化 // 从O(v*E)的复杂度,到O(V^2)或者是O(E*log(V)) ...

  9. 关于在Spring项目中使用thymeleaf报Exception parsing document错误

    今天在使用SpringBoot的过程中,SpringBoot版本为1.5.18.RELEASE,访问thymeleaf引擎的html页面报错Exception parsing document: 这是 ...

  10. 微服务SpringCloud(一)

    Spring Cloud微服务(一) 什么是Spring Cloud 简单来说,Spring Cloud是一个微服务框架的规范,注意,只是规范,他不是任何具体的框架.Spring Cloud 为最常见 ...