说到列表视图,不难联想到前面提到过的数组适配器,但是数组适配器只能搭建文本选择项,扩展能力并不强,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. POJ_3663_贪心

    题目描述: 给你一堆数和一个限定的空间大小,要求求出两个数的和小于等于空间大小的对数. 思路: 贪心,先给一堆数从大到小排序. 第一个数取数组第一个,第二个数从第二个开始依次往后取,只要某个第二个数满 ...

  2. [RAC] 1. 安装Oracle RAC时,不能验证ASMSNMP密码问题的解决(ORA-01031或ORA-01017)

      1."ORA-01031: insufficient privileges" [grid@node1 bin]$ orapwd file=/u01/app/11.2.0/gri ...

  3. STM32片外SRAM作运行内存

    本例演示用的软硬件: 片内外设驱动库:STM32CubeF41.24.1的HAL库1.7.6,2019年4月12日 IDE:MDK-ARM 5.28.0.0,2019年5月 开发板:片外SRAM挂在F ...

  4. Csp_J2019游记

    Day_-14 学校开始停课集训,还好还有上午~~ Day_-7 马上半期考试+\(Csp\),心态已炸,却还要坚持集训 Day_-1 \(Csp\)前夕,打算临时抱抱佛脚,死磕了一下图论(诸如最小生 ...

  5. C标准库与嵌入式

    stddef.h,其中包括size_t,sizeof函数返回值,不同平台的大小不一致 Size and pointer difference types[edit] The C language sp ...

  6. MongoDB 复本集搭建

    复制集的特点   数据一致性 主是唯一的,但不是固定的  没有MySQL那样的双主结构 大多数原则,集群存活节点小于等于二分之一时集群不可写,只可读. 是否能选举出新的主节点,是由当前复制集成员存活量 ...

  7. curl 和 tcpdump

    curl: 1.通常使用curl 来监控网址状态, #curl -m 5 -s -o /dev/null -w %{http_code} www.baidu.com #200 -m 设置访问超时时间, ...

  8. 【转】Android WiFi 经常掉线出现的几个原因分析!

    原因1.从Log分析来看,这个是由于Dhcp request fail 导致最终disconnect . Log 分析如下: 16:53:31.659 958 6525 D NetUtils: dhc ...

  9. Starting MySQL... ERROR! The server quit without updating PID file (/home/mysql-5.6.43/data/localhost.localdomain.pid).

    启动MySQL出现如下错误 May :: localhost mysqld: Starting MySQL... ERROR! The server quit without updating PID ...

  10. MySQL中的索引、左连接、右连接、join、sql执行顺序

    逻辑架构: 1.连接层 2.服务层 3.引擎层(插拔式) 4.存储层 存储引擎: 常用的有:MyISAM.InnoDB 查看命令:show variables like '%storage_engin ...