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 ...
随机推荐
- Codeforces_831
A.线性判断. #include<bits/stdc++.h> using namespace std; ] = {}; int main() { ios::sync_with_stdio ...
- TTStand 基础知识[8] Build-In StepTypes(3)
Build-In Step Types的最后一篇,前面两篇的连接如下: TestStand 基础知识[7] Build-In StepTypes(2) TestStand 基础知识[6] Build- ...
- vue子向父传值
要弄懂子组件如何向父组件传值,需要理清步骤 子组件向父组件传值的步骤 一:子组件在组件标签上通过绑定事件的方式向父组件发射数据 <!--html--><template id=&qu ...
- ASP.NET Core MVC 中实现中英文切换
哈喽..大家好 很久没有更新了,今天就来一篇最近开发用到的功能,那就是中英文切换,这个实际上也不是高大上,先说一下原理,在.NET Core框架中给我们提供了全球化的类,叫做Localization, ...
- WLAN802.11
IEEE 802.11,1997年,原始标准(2Mbit/s,播在2.4GHz).DSSS, FHSS.该协议的一大缺点是它提供了太多的选择使得互操作性很难实现.所以它不严密,更像是一个beta标准, ...
- OSPF笔记——LSA及其字段,及其作用
Link State ID Link State ID remains at 32 bits in length, Link State ID has shed any addressing sema ...
- Linux监控-历史细项数据回溯
Linux监控数据回溯 网络服务监控 应用场景: lvs 后端内网端机器网络波动监控: nginx 80.443端口连接监控: mysql 连接监控 以上为抛砖引玉,根据环境安装到监控工具(open ...
- .net 微服务实践
l 前言 本文记录了我的一次.net core 微服务架构实践经验,以及所用到的技术 l 优点 每个服务聚焦于一块业务,无论在开发阶段或是部署阶段都是独立的,更适合被各个小团队开发维护,团队对服务 ...
- Java之GUI编程
GUI编程 组建 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1.简介 GUI的核心技术:Swing AWT 为什么不流行? 界面不美观. 需要jre环境.(没必 ...
- 【STM32H7教程】第47章 STM32H7的FMC总线基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第47章 STM32H7的FMC总线基础知识和HA ...