【Android】-- 下拉列表Spinner、适配器Adapter


一、下拉列表 Spinner

Spinner用于从一串列表中选择某项,功能类似于单选按钮的组合。

例:下拉列表框

 XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="下拉列表框"/>

    <Spinner
        android:id="@+id/sp_dropdown"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown"/>
<!--    对话框模式将此改成dialog-->
        android:spinnerMode="dialog"/>


</LinearLayout>

 java代码

public class SpinnerDropdwnActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    private Spinner sp_dropdown;
//    定义下拉列表需要显示的文本数组
    private final static String[] starArray = {"天安门广场","天坛公园","故宫","北京动物园"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spinner_dropdwn);
        sp_dropdown = findViewById(R.id.sp_dropdown);
//        声明数组适配器
        ArrayAdapter<String> startAdapter = new ArrayAdapter<>(this,R.layout.item_select,starArray);
//        设置下拉框标题,对话框模式才显示
        sp_dropdown.setPrompt("请选择地点");
        sp_dropdown.setAdapter(startAdapter);
//        设置默认显示第一项
        sp_dropdown.setSelection(0);
//        给下拉框设置选择监听器,一旦用户选中某一项,就触发监听器的onItemSelected方法
        sp_dropdown.setOnItemSelectedListener(this);

    }

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
        Toast.makeText(this,"你选择的是"+starArray[position],Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
}

layout下创建item_select.xml文件

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    android:textColor="#0000ff"
    android:textSize="17sp"
    android:text="北京"/>

二、适配器Adapter

适配器负责从数据集合中取出对应的数据显示到条目布局上。

 1、简单适配器SimpleAdapter

SimpleAdapter允许在列表项中同时展示文本与图片

例:

 XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="简单适配器"
        android:textSize="17sp"/>

    <Spinner
        android:id="@+id/sp_icon"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown"/>
</LinearLayout>

java代码

public class SpinnerIconActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
//定义下拉列表需要显示的图标数组
    private static final int[] iconArray = {
            R.drawable.csdn,R.drawable.csdn,R.drawable.csdn,R.drawable.csdn
};
//定义下拉列表需要显示的名称数组
    private static final String[] starArray = {"CSDN","CSDN","CSDN","CSDN"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spinner_icon);
//        声明一个映射对象的列表,用于保存图标与名称配对信息
        List<Map<String,Object>> list = new ArrayList<>();
//        iconArray是图标数组,starArray是名称数组
        for (int i = 0; i < iconArray.length; i++) {
            Map<String,Object> item = new HashMap<>();
            item.put("icon",iconArray[i]);
            item.put("name",starArray[i]);
            list.add(item);
        }
//        声明下拉列表的简单适配器,其中指定图标与文本两组数据
        SimpleAdapter startAdapter = new SimpleAdapter(this,list,R.layout.item_simple,
                new String[]{"icon","name"},
                new int[]{R.id.iv_icon,R.id.tv_name});
        Spinner sp_icon = findViewById(R.id.sp_icon);
        sp_icon.setAdapter(startAdapter);
        sp_icon.setSelection(0);
        sp_icon.setOnItemSelectedListener(this);
    }

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        Toast.makeText(this,"你选择的是"+starArray[i],Toast.LENGTH_SHORT);
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
}

layout下新建item_icon.xml文件

<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_weight="1"
        android:layout_height="50dp"
        android:src="@drawable/csdn"/>

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="0dp"
        android:layout_weight="3"
        android:layout_height="match_parent"
        android:gravity="center"
        android:textColor="#ff0000"
        android:textSize="17sp"
        android:text="北京"/>

</LinearLayout>

2、基本适配器BaseAdapter

BaseAdapter是一种适应性更强的基本适配器

例:

XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="基本适配器"
        android:textSize="17sp"/>

    <Spinner
        android:id="@+id/sp_base"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown"/>
</LinearLayout>

java代码

public class BaseAdapterActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    private List<CSDN> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base_adapter);
        Spinner sp_base = findViewById(R.id.sp_base);
//        获取默认的列表
        list = CSDN.getDefaultList();
//        构建适配器
        CSDNBaseAdapter adapter = new CSDNBaseAdapter(this, list);
        sp_base.setAdapter(adapter);
        sp_base.setSelection(0);
        sp_base.setOnItemSelectedListener(this);
    }

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        Toast.makeText(this,"你选择的是"+list.get(i).name,Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
}

由于base适配器是抽象类不能直接使用,创建适配器类java代码

public class CSDNBaseAdapter extends BaseAdapter {
    private Context mContext;
    private List<CSDN> mlist;

    public CSDNBaseAdapter(Context mContext, List<CSDN> list) {
        this.mContext = mContext;
        this.mlist = list;
    }

    @Override
    public int getCount() {
        return mlist.size();
    }

    @Override
    public Object getItem(int i) {
        return mlist.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        return null;
    }
}

实体类

public class CSDN {
    public int image;
    public String name;
    public String desc;

    public CSDN(int image,String name,String desc){
        this.image = image;
        this.name = name;
        this.desc = desc;
    }
    private static int[] iconArray = {
            R.drawable.csdn,R.drawable.csdn,R.drawable.csdn,R.drawable.csdn
    };
    private static String[] nameArray = {"CSDN","CSDN","CSDN","CSDN"};
    private static String[] descArray = {
            "shewyoo",
            "shewyoo",
            "shewyoo",
            "shewyoo"
    };
    public static List<CSDN> getDefaultList(){
        List<CSDN> list = new ArrayList<>();
        for (int i = 0; i < iconArray.length; i++) {
            list.add(new CSDN(iconArray[i],nameArray[i],descArray[i]));
        }
        return list;
    }
}

layout下创建item_list.xml文件

<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_weight="1"
        android:layout_height="80dp"
        android:scaleType="fitCenter"
        android:src="@drawable/csdn"/>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginLeft="5dp"
        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="start|center"
            android:textColor="@color/black"
            android:textSize="20sp"
            android:text="CSDN"/>
<!--        描述文本-->
        <TextView
            android:id="@+id/tv_desc"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="2"
            android:gravity="start|center"
            android:textColor="@color/black"
            android:textSize="13sp"
            android:text="shewyoo"/>
    </LinearLayout>
</LinearLayout>

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Android中使用Spinner下拉列表,您可以按照以下步骤创建一个新的应用程序: 1. 打开Android Studio,并创建一个新的空白项目。 2. 在res/layout目录中创建一个新的XML文件,例如“activity_main.xml”。 3. 在XML布局文件中添加Spinner控件。例如: ``` <Spinner android:id="@+id/my_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` 这将创建一个默认的Spinner控件。 4. 在MainActivity.java文件中,添加以下代码: ``` public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { Spinner mySpinner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mySpinner = findViewById(R.id.my_spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.my_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mySpinner.setAdapter(adapter); mySpinner.setOnItemSelectedListener(this); } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String item = parent.getItemAtPosition(position).toString(); Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { // Do nothing } } ``` 这将创建一个适配器,将适配器绑定到Spinner控件上,并设置选择监听器以处理选择事件。 5. 在res/values目录中创建一个新的XML文件,例如“strings.xml”。 6. 在strings.xml文件中添加以下代码: ``` <string-array name="my_array"> <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> </string-array> ``` 这将创建一个字符串数组,用于填充Spinner控件。 7. 运行应用程序并测试Spinner控件。 这样,您就可以在Android中使用Spinner下拉列表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四月天行健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值