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

时间: 2023-07-11 admin IT培训

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

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

Android下拉列表

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

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

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

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

 <Spinnerandroid: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<>();@Overrideprotected 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{@Overridepublic int getCount() {//return ss.length;return list.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic 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() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {//选择了不同的选项,调用这个Toast.makeText(MainActivity.this,ss[position],Toast.LENGTH_SHORT).show();}@Overridepublic 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<>();@Overrideprotected 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() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {//选择了不同的选项,调用这个Toast.makeText(MainActivity.this,list.get(position),Toast.LENGTH_SHORT).show();}@Overridepublic 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() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {//选择了不同的选项,调用这个Toast.makeText(MainActivity.this,ss[position],Toast.LENGTH_SHORT).show();}@Overridepublic void onNothingSelected(AdapterView<?> parent) {//在下拉选项种选择了本来选的东西,也就是说没改变选项,调用这个}});}private class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {//return ss.length;return list.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic 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;}}
}

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