• 高级控件——列表类视图——基本适配器BaseAdapter


    ===================================================================

    第一个页面布局:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="5dp">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="行星的基本适配器"
            android:textColor="@color/black"
            android:textSize="20sp" />
    
        <Spinner
            android:id="@+id/sp_planet"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:spinnerMode="dialog" />"
    
    </LinearLayout>

     

    代码:

    package com.example.myapplication;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.SimpleAdapter;
    import android.widget.Spinner;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class MainActivity extends AppCompatActivity
    {
        private List<Planet> planetList; // 声明一个行星列表
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            initPlanetSpinner(); // 初始化行星列表的下拉框
        }
    
        // 初始化行星列表的下拉框
        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());
        }
    
        // 定义一个选择监听器,它实现了接口OnItemSelectedListener
        private class MySelectedListener implements AdapterView.OnItemSelectedListener
        {
            // 选择事件的处理方法,其中arg2代表选择项的序号
            public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3)
            {
                Toast.makeText(MainActivity.this, "您选择的是" + planetList.get(arg2).name, Toast.LENGTH_LONG).show();
            }
    
            // 未选择时的处理方法,通常无需关注
            public void onNothingSelected(AdapterView<?> arg0) {}
        }
    
    }

     

    Planet.java
    package com.example.myapplication;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Planet
    {
        public int image; // 行星图标
        public String name; // 行星名称
        public String desc; // 行星描述
    
        public Planet(int image, String name, String desc)
        {
            this.image = image;
            this.name = name;
            this.desc = desc;
        }
    
        private static int[] iconArray = {R.drawable.shuixing, R.drawable.jinxing, R.drawable.diqiu, R.drawable.huoxing, R.drawable.muxing, R.drawable.tuxing};
    
        private static String[] nameArray = {"水星", "金星", "地球", "火星", "木星", "土星"};
    
        private static String[] descArray = {
                "水星是太阳系八大行星最内侧也是最小的一颗行星,也是离太阳最近的行星",
                "金星是太阳系八大行星之一,排行第二,距离太阳0.725天文单位",
                "地球是太阳系八大行星之一,排行第三,也是太阳系中直径、质量和密度最大的类地行星,距离太阳1.5亿公里",
                "火星是太阳系八大行星之一,排行第四,属于类地行星,直径约为地球的53%",
                "木星是太阳系八大行星中体积最大、自转最快的行星,排行第五。它的质量为太阳的千分之一,但为太阳系中其它七大行星质量总和的2.5倍",
                "土星为太阳系八大行星之一,排行第六,体积仅次于木星"
        };
    
        public static List<Planet> getDefaultList()
        {
            List<Planet> planetList = new ArrayList<Planet>();
    
            for (int i = 0; i < iconArray.length; i++)
            {
                planetList.add(new Planet(iconArray[i], nameArray[i], descArray[i]));
            }
    
            return planetList;
        }
    }

     

    item_list

    <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>

     

     

    PlanetBaseAdapter.java
    package com.example.myapplication;
    
    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 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; // 声明行星描述的文本视图对象
        }
    }

     

     

    ====================================================================================

    ================================================================================

     

     

     

     

     

     

  • 相关阅读:
    LeetCode (Two Sum & Add Two nums)
    打包时记录编译开始时间并在App中获取
    CocoaPods
    不知所云
    苹果审核相关内容
    iOS权限的一些备注
    触发网络权限弹窗的一些特别方式记录
    iOS13和iOS14里面访问相册选取图片的两种方式的区别
    @Configuration@Bean
    ACID
  • 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/16484272.html
Copyright © 2020-2023  润新知