Android列表类视图之基本适配器BaseAdapter
说到列表视图,不难联想到前面提到过的数组适配器,但是数组适配器只能搭建文本选择项,扩展能力并不强,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的更多相关文章
- android中的万能适配器BaseAdapter的总结
有时候,列表不光会用来做显示用,我们同样可以在在上面添加按钮.添加按钮首先要写一个有按钮的xml文件,然后自然会想到用上面的方法定义一个适配器,然后将数据映射到布局文件上.但是事实并非这样,因为按钮是 ...
- Android必学之数据适配器BaseAdapter
什么是数据适配器? 下图展示了数据源.适配器.ListView等数据展示控件之间的关系.我们知道,数据源是各种各样的,而ListView所展示数据的格式则是有一定的要求的.数据适配器正是建立了数据源与 ...
- Android开发 ListView(垂直滚动列表项视图)的简单使用
效果图: 使用方法: 1.在布局文件中加入ListView控件: <?xml version="1.0" encoding="utf-8"?> &l ...
- Android列表视图(List View)
Android列表视图(ListView) ListView是一个显示滚动项列表的示视图组(viewgroup),通过使用适配器(Adapter)把这些列表项自动插入到列表中.适配器比如从一个数组或是 ...
- Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式
Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式 Fragment FragmentManager frag ...
- 【Android自学日记】两种适配器的使用
ArrayAdapter适配器: (1)用于显示基本的文字内容 (2)基本使用过程:新建适配器---创建或加载数据源---适配器加载数据源---视图加载适配器 ArrayAdapter(上下文,当前L ...
- Android——列表选择框(Spinner)
通常情况下,如果列表选择框中要显示的列表项是可知的,那么可以将其保存在数组资源文件中,然后通过数组资源来为列表选择框指定列表项.这样就可以在不编写Java代码的情况下实现一个下拉选择框. 1.在布局文 ...
- Android列表控件ListView详解
ListView绝对可以称得上是Android中最常用的控件之一,几乎所有应用程序都会用到它. 由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候 ...
- Android常用控件之GridView使用BaseAdapter
我们可以为GridView添加自定义的Adapter,首先看下用自定义Adapter的显示效果 在布局文件main.xml文件中定义一个GridView控件 <RelativeLayout xm ...
随机推荐
- 高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)
LVS(负载均衡器).Heartbeat.Corosync.Pacemaker.Web高可用集群.MySQL高可用集群.DRDB.iscsi.gfs2.cLVM等,唯一没有讲解的就是L ...
- 【Java编程思想读书笔记】继承中父类的初始化方式
继承中父类的初始化方式 p144页有感 一.提出问题 假设有一些类,这些类有继承关系的时候,当初始化一个子类对象,对于该类的父类而言,发生了什么呢?是仅仅只是复制了一个引用还是也会同时new一个父类对 ...
- vue插件介绍
1.插件和组件的关系 在没有封装组件之前,如果不使用第三方插件,那么很多情况下我们会编写几个常用的组件来提供给页面使用,如Alert/Loading组件,而你可能需要在很多页面中引入并且通过compo ...
- 前缀和&差分
一:差分数组概念 一.差分数组的定义及用途 1.定义:对于已知有n个元素的数列d,建立记录它每项与前一项差值的差分数组f:显然,f[1]=d[1]-0=d[1];对于整数i∈[2,n],我们让f[i ...
- Docker深入浅出系列 | 容器数据持久化
Docker深入浅出系列 | 容器数据持久化 Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会 ...
- C++中的多态及虚函数大总结
多态是C++中很关键的一部分,在面向对象程序设计中的作用尤为突出,其含义是具有多种形式或形态的情形,简单来说,多态:向不同对象发送同一个消息,不同的对象在接收时会产生不同的行为.即用一个函数名可以调用 ...
- asp.net core 3.1 入口:Program.cs中的Main函数
本文分析Program.cs 中Main()函数中代码的运行顺序分析asp.net core程序的启动,重点不是剖析源码,而是理清程序开始时执行的顺序.到底用了哪些实例,哪些法方. asp.net c ...
- Verilog HDL学习_1:分频器/PWM的实现
(一)参考学习资料 (二)实际操作 1. 相关变量计算: First Initial Second Initial Upper case H X ASCII (Dec) 72 88 Lengths ...
- .NET CORE(C#) WPF 抽屉式菜单
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. .NET CORE(C#) WPF 抽屉式菜单 阅读导航 本文背景 代码实现 本文参考 源码 ...
- 02-flink时间语义 与 Window 基础概念与实现原理
Flink 多种时间语义对比 Flink 在流应用程序中支持不同的 Time 概念,就比如有 Processing Time.Event Time 和 Ingestion Time.下面我们一起来看看 ...