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;
}
}
}
记得点个赞再走呐!!
参考自:尚学堂