今天主要内容,完成地铁app主页面及其跳转页面设计,具体情况在第一次结对作业中,
之后学习
数组适配器适用于纯文本的列表数据,简单适配器适用于带图标的列表数据。然 而实际应用常常有更复杂的列表,比如每个列表项存在3个以上的控件,这种情况即便是简单适配器也很 吃力,而且不易扩展。为此Android提供了一种适应性更强的基本适配器BaseAdapter,该适配器允许 开发者在别的代码文件中编写操作代码,大大提高了代码的可读性和可维护性。 从BaseAdapter派生的数据适配器主要实现下面5种方法。构造方法:指定适配器需要处理的数据集合。 getCount:获取列表项的个数。 getItem:获取列表项的数据。 getItemId:获取列表项的编号。 getView:获取每项的展示视图,并对每项的内部控件进行业务处理。 下面以下拉框控件为载体,演示如何操作BaseAdapter,具体的编码过程分为3步: 步骤一,编写列表项的布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <!-- 这是显示行星图片的图像视图 --> <ImageView android:id="@+id/iv_icon" android:layout_width="0dp" android:layout_height="80dp" android:layout_weight="1" android:scaleType="fitCenter" /> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3" android:layout_marginLeft="5dp" 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="@color/black" 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="@color/black" android:textSize="13sp" /> </LinearLayout> </LinearLayout> 步骤二,写个新的适配器继承BaseAdapter (package com.example.chapter08.adapter; 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.TextView; import com.example.chapter08.R; import com.example.chapter08.bean.Planet; import java.util.List; public class PlanetBaseAdapter extends BaseAdapter { private Context mContext; // 声明一个上下文对象 private List<Planet> mPlanetList; // 声明一个行星信息列表 // 行星适配器的构造方法,传入上下文与行星列表 public PlanetBaseAdapter(Context context, List<Planet> planet_list) { mContext = context; mPlanetList = planet_list; } // 获取列表项的个数 public int getCount() { return mPlanetList.size(); } // 获取列表项的数据 public Object getItem(int arg0) { return mPlanetList.get(arg0); } // 获取列表项的编号 public long getItemId(int arg0) { return arg0; } // 获取指定位置的列表项视图 public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { // 转换视图为空 holder = new ViewHolder(); // 创建一个新的视图持有者 // 根据布局文件item_list.xml生成转换视图对象 convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null); holder.iv_icon = convertView.findViewById(R.id.iv_icon); holder.tv_name = convertView.findViewById(R.id.tv_name); holder.tv_desc = convertView.findViewById(R.id.tv_desc); convertView.setTag(holder); // 将视图持有者保存到转换视图当中 } else { // 转换视图非空 // 从转换视图中获取之前保存的视图持有者 holder = (ViewHolder) convertView.getTag(); }Planet planet = mPlanetList.get(position); holder.iv_icon.setImageResource(planet.image); // 显示行星的图片 holder.tv_name.setText(planet.name); // 显示行星的名称 holder.tv_desc.setText(planet.desc); // 显示行星的描述 holder.iv_icon.requestFocus(); return convertView; } // 定义一个视图持有者,以便重用列表项的视图资源 public final class ViewHolder { public ImageView iv_icon; // 声明行星图片的图像视图对象 public TextView tv_name; // 声明行星名称的文本视图对象 public TextView tv_desc; // 声明行星描述的文本视图对象 } } 步骤三,在页面代码中创建该适配器实例 // 初始化行星列表的下拉框 private void initPlanetSpinner() { // 获取默认的行星列表,即水星、金星、地球、火星、木星、土星 planetList = Planet.getDefaultList(); // 构建一个行星列表的适配器 PlanetBaseAdapter adapter = new PlanetBaseAdapter(this, planetList); // 从布局文件中获取名叫sp_planet的下拉框 Spinner sp_planet = findViewById(R.id.sp_planet); sp_planet.setPrompt("请选择行星"); // 设置下拉框的标题 sp_planet.setAdapter(adapter); // 设置下拉框的列表适配器 sp_planet.setSelection(0); // 设置下拉框默认显示第一项 // 给下拉框设置选择监听器,一旦用户选中某一项,就触发监听器的onItemSelected方法 sp_planet.setOnItemSelectedListener(new MySelectedListener()); } 标签:21,适配器,视图,列表,planet,软件工程,2023,import,holder From: https://www.cnblogs.com/ewqewq/p/17241411.html