Android下拉列表怎么做?(小白速成7)

Android下拉列表

采用组件设置的形式添加下拉列表

我们要先添加选项,也就是我们列表中要选择的东西。
定义在values文件夹中的strings.xml中.

 <string-array name="spinner_data">
        <item>山西</item>
        <item>陕西</item>
        <item>江西</item>
    </string-array>

如上,我们定义了三个选项。
在main中,我们定义如下组件,即可实现含有上面定义的三个选项的下拉列表。

 <Spinner
        android:id="@+id/spinner"
        android:layout_width="409dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="1dp"
        android:layout_marginLeft="1dp"
        android:layout_marginTop="52dp"

        android:entries="@array/spinner_data"
        android:spinnerMode="dialog"

        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

android:spinnerMode=“dialog” 表示我们的下拉列表是弹出框的形式,
android:spinnerMode= “dropdown” 表示下拉列表是下拉的形式。

但是这样的下拉列表选项不方便更改,我们还可以选择代码的形式

代码形式的下拉列表

package com.example.test_spinner;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private String[] ss=new String[]{
      "北京",
      "上海",
      "深圳"
    };
    private List<String> list =new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list.add("java");
        list.add("cpp");

        Spinner spinner=findViewById(R.id.spinner);
        BaseAdapter adapter =new MyAdapter();//adapter适配器
        spinner.setAdapter(adapter);

       

    }
    private class MyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            //return ss.length;
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView textView=new TextView(MainActivity.this);
           //textView.setText(ss[position]);
            textView.setText(list.get(position));
            return textView;
        }
    }
}

列表中的选项可以由数组给出,也可以由list给出。以上代码是list形式,如果选择注释中的代码,则是采用数组的形式。
在这里插入图片描述
如果感觉上面这种方式过于长,我们也可以选择另一种较为简短的代码——适配数组的代码形式:

ArrayAdapter<String> adapter2=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item ,ss);
        Spinner spinner2=findViewById(R.id.spinner2);
        spinner2.setAdapter(adapter2);

如图:
在这里插入图片描述
是不是简单了很多?

最后我们也可以添加监视器,显示我们选择的选项:

  spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                //选择了不同的选项,调用这个
                Toast.makeText(MainActivity.this,ss[position],Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                //在下拉选项种选择了本来选的东西,也就是说没改变选项,调用这个

            }
        });

这样我们就完成了对下拉列表的新建。
整体代码如下:

package com.example.test_spinner;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private String[] ss=new String[]{
      "北京",
      "上海",
      "深圳"
    };
    private List<String> list =new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list.add("java");
        list.add("cpp");

        Spinner spinner=findViewById(R.id.spinner);
        BaseAdapter adapter =new MyAdapter();//adapter适配器
        spinner.setAdapter(adapter);

        //可以监听器看看
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                //选择了不同的选项,调用这个
                Toast.makeText(MainActivity.this,list.get(position),Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                //在下拉选项种选择了本来选的东西,也就是说没改变选项,调用这个

            }
        });

        //第二种方法
        ArrayAdapter<String> adapter2=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item ,ss);
        Spinner spinner2=findViewById(R.id.spinner2);
        spinner2.setAdapter(adapter2);
        spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                //选择了不同的选项,调用这个
                Toast.makeText(MainActivity.this,ss[position],Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                //在下拉选项种选择了本来选的东西,也就是说没改变选项,调用这个

            }
        });

    }
    private class MyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            //return ss.length;
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView textView=new TextView(MainActivity.this);
           //textView.setText(ss[position]);
            textView.setText(list.get(position));
            return textView;
        }
    }
}

记得点个赞再走呐!!
参考自:尚学堂

  • 18
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值