下拉列表
在Android中,官方为我们提供了用来实现下拉列表的组件Spinner,我们使用这个组件就可以完成下拉列表的创建。
下拉列表的两种实现方式
静态创建就是在布局文件中使用 android:entries属性指定下拉列表数据的存放文件,这样就不需要在代码中进行任何操作,即可创建下拉列表。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TestActivity2"
android:orientation="vertical">
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/spinner1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="分割"/>
<Spinner
android:id="@+id/spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
spinner1.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="spinner">
<item>北京</item>
<item>上海</item>
<item>深圳</item>
</string-array>
</resources>
动态创建就是在代码中指定下拉列表的数据。data_list是存放数据的列表。
/**
* 动态创建下拉列表
*/
public void createSpinner2() {
spinner = findViewById(R.id.spinner2);
data_list = new ArrayList<>();
data_list.add("北京");
data_list.add("上海");
data_list.add("广州");
data_list.add("深圳");
//适配器
arr_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,data_list);
//设置样式
arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
//加载适配器
spinner.setAdapter(arr_adapter);
}
使用下拉列表实现多级联动
多级联动实现的要点在于选择了第一级以后,需要自动在第二级设置出对应的数据。
在布局文件中添加以下代码
<TextView
android:id="@+id/spinner3"
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="以下是三级联动"/>
<Spinner
android:id="@+id/spinner4"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Spinner
android:id="@+id/spinner5"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
/**
* 二级联动
*/
public void createSpinner3() {
spinner4 = findViewById(R.id.spinner4);
spinner5 = findViewById(R.id.spinner5);
ArrayList<String> data4 = new ArrayList<>();
data4.add("北京");
data4.add("上海");
data4.add("深圳");
//设置第一级的数据
adapter4 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,data4);
adapter4.setDropDownViewResource(android.R.layout.simple_spinner_item);
spinner4.setAdapter(adapter4);
//给第一级设置选项选中事件
spinner4.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d(TAG, "onItemClick: " + adapter4.getItem(position));
Log.d(TAG, "onItemClick: " + data4.get(position));
//判断被选中的是第一级的哪个数据,然后设置对应的数据
if ("北京".equals(data4.get(position))) {
//将数据绑定到选中的选项上
adapter5 = ArrayAdapter.createFromResource(TestActivity2.this, R.array.bj, android.R.layout.simple_spinner_item);
spinner5.setAdapter(adapter5);
} else if ("上海".equals(data4.get(position))) {
adapter5 = ArrayAdapter.createFromResource(TestActivity2.this, R.array.sh, android.R.layout.simple_spinner_item);
spinner5.setAdapter(adapter5);
} else {
adapter5 = ArrayAdapter.createFromResource(TestActivity2.this, R.array.sz, android.R.layout.simple_spinner_item);
spinner5.setAdapter(adapter5);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
sz.xml文件,此文件在values目录下创建。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="sz">
<item>南山区</item>
<item>龙岗区</item>
<item>福田区</item>
</string-array>
</resources>
bj.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="bj">
<item>大兴区</item>
<item>怀柔区</item>
<item>通州区</item>
</string-array>
</resources>
sh.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="sh">
<item>奉贤区</item>
<item>黄埔区</item>
<item>青浦区</item>
</string-array>
</resources>