我知道这已有大约一百万个主题,但请听我说。
标题说明了一切,当我在微调器1中选择一个项目时,微调器2会获得一个特定的选择列表(然后将用于显示信息)。它本质上是一本小型通讯录。
*的 更新 ** 所有固定和工作,以及EXTRA特别感谢用户FishTruck帮助(即使其工作!)
package com.your.package.name;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
public class Contact extends Activity{
public Spinner spinner1, spinner2;
public Button btnSubmit;//not needed yet
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.contact);
findViews();
addItemsOnSpinner1();
addItemsOnSpinner2(0);
}
private void findViews(){
spinner1 = (Spinner) findViewById(R.id.spinner1);
spinner2 = (Spinner) findViewById(R.id.spinner2);
}
private void addItemsOnSpinner1() {
List<String> list = new ArrayList<String>();
list.add("Please Select");
list.add("Choice 1");
list.add("choice 2");
ArrayAdapter<String> name = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
name.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(name);
spinner1.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
if(arg2>0)
addItemsOnSpinner2(arg2);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
addItemsOnSpinner2(0);
}}
);
}
private void addItemsOnSpinner2(int selectedIndex) {
int positionTop = selectedIndex;
if(positionTop==0){
List<String> list = new ArrayList<String>();
list.add("Please Select");
ArrayAdapter<String> name0 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
name0.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(name0);
}else if(positionTop==1){
List<String> list1 = new ArrayList<String>();
list1.add("Please Select");
list1.add("item 1");
list1.add("item 2");
ArrayAdapter<String> name1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list1);
name1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(name1);
}else if(positionTop==2){
List<String> list2 = new ArrayList<String>();
list2.add("Please Select");
list2.add("item 3");
list2.add("item 4");
ArrayAdapter<String> name2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list2);
name2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(name2);
}
}
}
希望这有帮助!
答案 0 :(得分:1)
当第一个微调器项目被选中时,你需要调用addItemsOnSpinner2()
函数。
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
addItemsOnSpinner2();}
答案 1 :(得分:0)
您要在代码的开头设置两个微调器(在onCreate中)。您应该在更改spinner1数据后填充第二个微调器
答案 2 :(得分:0)
为了让第二个微调器获得正确的索引来设置列表,
您需要在单击第一个微调器后填充它。
/ *错误答案已删除* /
如果这是我的代码,我会将addItemsOnSpinner2()更改为:
private void addItemsOnSpinner2(int selectedIndex){
int positionTop = selectedIndex;
//rest is the same
/* ... */
}
并再次将这些插入addItemsOnSpinner1():
spinner1.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
if(arg2>0)
addItemsOnSpinner2(arg2);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
addItemsOnSpinner2(0);
}}
);
这就是我将如何做到这一点
我认为很多方法可以在这里使用
edit2:哦,将onCreate()中的addItemsOnSpinner2()编辑成addItemsOnSpinner2(0)
edit3:你需要在onCreate()中调用addItemsOnSpinner2(),否则你的微调器是空的!
edit4:抱歉,伙计们,我犯了一个很大的错误,认为onItemClickListener可以在这里应用,对我感到羞耻:((
不过,如果你想保留索引(在屏幕方向改变或回到前台的情况下),它需要更复杂的工作但这是一个更简单的方法:
1.设置全局静态变量:int selectedIndex;
2.in onCreate,如果savedInstanceState为null,则将selectedIndex设置为0
3.in onCreate,在savedInstanceState为nullcheckd之后,调用addItemsOnSpinner2(selectedIndex)
4.在spinner1的监听器中,将selectedIndex设置为选定的索引。
不保证在每台机器上工作:(