Android 如何使用setOnItemSelectedListener基于前两个微调器填充微调器
我有三个微调器,第一个是从字符串xml文件填充的,第二个应该基于第一个选择填充,第三个基于第二个选择填充 我在周末搜索并尝试了几种逻辑,但没有成功。在第二个和第三个微调器上设置setOnItemSelectedListener后,不会填充任何微调器 请帮帮我。下面提供了示例代码Android 如何使用setOnItemSelectedListener基于前两个微调器填充微调器,android,Android,我有三个微调器,第一个是从字符串xml文件填充的,第二个应该基于第一个选择填充,第三个基于第二个选择填充 我在周末搜索并尝试了几种逻辑,但没有成功。在第二个和第三个微调器上设置setOnItemSelectedListener后,不会填充任何微调器 请帮帮我。下面提供了示例代码 public class Reg_Prop extends Activity implements AdapterView.OnItemSelectedListener { //create reference But
public class Reg_Prop extends Activity implements AdapterView.OnItemSelectedListener {
//create reference
Button btnSave;
Spinner spinProvince, spinDistrict, spinLocal;
String spinPro, spinDist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reg_prop);
Toast.makeText(this, "Please select the Province, District and Local Municipality where the " +
"Property is located", Toast.LENGTH_LONG).show();
//Initialise reference
btnSave = (Button)findViewById(R.id.btnSave);
spinProvince = (Spinner)findViewById(R.id.spinProvince);
spinDistrict=(Spinner)findViewById(R.id.spinDistrict);
spinLocal=(Spinner)findViewById(R.id.spinLocal);
//set onClick Listener
btnSave.setOnClickListener(new View.OnClickListener() {
//@Overridde
public void onClick(View v) {
try {
Intent ro = new Intent(getApplicationContext(), MainActivity.class);
startActivity(ro);
//Toast.makeText(getApplicationContext(), "Login button pressed", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Login window could not display",
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
});
//set onItemSelected Listener
spinProvince.setOnItemSelectedListener(this);
spinDistrict.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (view.getId()){
case R.id.spinProvince:
spinPro = String.valueOf(spinProvince.getSelectedItem());
Toast.makeText(this, spinPro, Toast.LENGTH_SHORT).show();
if(spinPro.contentEquals("Eastern Cape")){
List<String> list = new ArrayList<String>();
list.add("Select District/Metro *");
list.add("Buffalo City");
list.add("Nelson Mandela Bay");
list.add("Alfred Nzo District");
list.add("Amathole District");
list.add("Chris Hani District");
list.add("Joe Gqabi District");
list.add("OR Tambo District");
list.add("Cacadu District");
final ArrayAdapter<String> districtAdapter = new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item, list);
districtAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
districtAdapter.notifyDataSetChanged();
spinDistrict.setAdapter(districtAdapter);
}
}
else{
Toast.makeText(this, "Please select the Province where the Property is located", Toast.LENGTH_LONG).show();
}
break;
case R.id.spinDistrict:
spinDist = spinDistrict.getSelectedItem().toString();
if(spinDist != "" && spinDist != "Select District/Metro *" || spinDist != "Select District *"){
switch (spinDist){
case "Buffalo City":
List<String> list = new ArrayList<String>();
list.add("Select District/Metro *");
list.add("...");
list.add("N....");
list.add("Local");
list.add("Amathole District");
list.add("Chris Hani District");
list.add("Joe Gqabi District");
list.add("OR Tambo District");
list.add("Cacadu District");
final ArrayAdapter<String> localAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
localAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
localAdapter.notifyDataSetChanged();
spinLocal.setAdapter(localAdapter);
break;
}
}
else{
Toast.makeText(this, "Please select the District Municipality", Toast.LENGTH_LONG).show();
}
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Toast.makeText(this, "Please select the Province, District and Local Municipality where the Property is located", Toast.LENGTH_LONG).show();
}
public class Reg_Prop扩展活动实现AdapterView.OnItemSelectedListener{
//创建引用
按钮btnSave;
Spinner Spinner省、spinDistrict、spinLocal;
字符串spinPro,spinDist;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u reg\u prop);
Toast.makeText(此“请选择+
“属性位于”,Toast.LENGTH_LONG.show();
//初始化引用
btnSave=(按钮)findviewbyd(R.id.btnSave);
spinProvince=(微调器)findViewById(R.id.spinProvince);
spinDistrict=(微调器)findViewById(R.id.spinDistrict);
spinLocal=(微调器)findViewById(R.id.spinLocal);
//设置onClick侦听器
btnSave.setOnClickListener(新视图.OnClickListener(){
//@凌驾
公共void onClick(视图v){
试一试{
Intent ro=新的Intent(getApplicationContext(),MainActivity.class);
星触觉;
//Toast.makeText(getApplicationContext(),“登录按钮按下”,Toast.LENGTH_LONG.show();
}捕获(例外e){
Toast.makeText(getApplicationContext(),“登录窗口无法显示”,
Toast.LENGTH_LONG).show();
e、 printStackTrace();
}
}
});
//设置选定的侦听器
spinProvince.setOnItemSelectedListener(此);
spinDistrict.setOnItemSelectedListener(此);
}
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
开关(view.getId()){
案例R.id.S省:
spinPro=String.valueOf(spinProvince.getSelectedItem());
Toast.makeText(this,spinPro,Toast.LENGTH_SHORT).show();
if(spinPro.contentEquals(“东开普”)){
列表=新的ArrayList();
列表。添加(“选择地区/地铁*”;
添加(“水牛城”);
添加(“纳尔逊曼德拉湾”);
添加列表(“Alfred Nzo区”);
列表。添加(“Amathole区”);
列表。添加(“克里斯哈尼区”);
列表。添加(“Joe Gqabi区”);
列表。添加(“或坦博区”);
添加列表(“卡卡杜区”);
最终ArrayAdapter districtAdapter=新的ArrayAdapter(此,
android.R.layout.simple\u微调器\u项目,列表);
districtAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
districtAdapter.notifyDataSetChanged();
spinDistrict.setAdapter(districtAdapter);
}
}
否则{
Toast.makeText(这是“请选择属性所在的省”,Toast.LENGTH_LONG.show();
}
打破
案例R.id.spinDistrict:
spinDist=spinDistrict.getSelectedItem().toString();
如果(微调器!=“”&微调器!=“选择地区/地铁*”| |微调器!=“选择地区*”){
开关(旋转器){
案例“布法罗市”:
列表=新的ArrayList();
列表。添加(“选择地区/地铁*”;
列表。添加(“…”);
列表。添加(“N…”);
列表。添加(“本地”);
列表。添加(“Amathole区”);
列表。添加(“克里斯哈尼区”);
列表。添加(“Joe Gqabi区”);
列表。添加(“或坦博区”);
添加列表(“卡卡杜区”);
final ArrayAdapter localAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u项,列表);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
localAdapter.notifyDataSetChanged();
setAdapter(localAdapter);
打破
}
}
否则{
Toast.makeText(这是“请选择地区市政当局”,Toast.LENGTH_LONG.show();
}
打破
}
}
@凌驾
未选择公共无效(AdapterView父级){
Toast.makeText(这是“请选择财产所在的省、区和地方市政当局”,Toast.LENGTH_LONG).show();
}
感谢所有阅读并试图帮助我的人。我终于解决了这个问题
我所要做的就是将前两个微调器的setOnItemSelectedListener放在onCreate中,然后使用函数根据选择填充第二个和第三个微调器。注意:第一个微调器是从字符串xml文件填充的
下面是示例代码
内部onCreate:
//set onItemSelected Listener
spinProvince.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String province = (String)parent.getItemAtPosition(position);
if(province.matches("Eastern Cape")){
spinPro = 1;
populateDist();
}
else if(province.matches("Free State")){
spinPro = 2;
populateDist();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Toast.makeText(Reg_Prop.this, "Please select the Province where the Property is located", Toast.LENGTH_LONG).show();
}
});
spinDistrict.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String spinDist = (String)parent.getItemAtPosition(position);
if(spinDist.matches("Buffalo City") && spinPro == 1){
dist = 1;
populateLocal();
}
else if(spinDist.matches("Nelson Mandela Bay") && spinPro == 1){
dist = 2;
populateLocal();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
//设置选定的侦听器
spinProvince.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
字符串provider=(字符串)parent.getItemAtPosition(位置);
如果(省匹配(“东开普”)){
spinPro=1;
人口主义者();
}
else if(省匹配(“自由州”)){
spinPro=2;
人口主义者();
}
}
@凌驾
未选择公共无效(AdapterView父级){
void populateDist(){
//Eatern Cape
if(spinPro == 1){
String [] ec = {"Select District/Metro *", "Buffalo City", "Nelson Mandela Bay",
"Alfred Nzo District", "Amathole District", "Chris Hani District",
"Joe Gqabi District", "OR Tambo District", "Cacadu District"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ec);
spinDistrict.setAdapter(adapter);
}
//Free State
else if(spinPro == 2){
String [] fs = {"Select District/Metro *", "Mangaung Metropolitan", "Fezile Dabi District",
"Lejweleputswa District", "Thabo Mofutsanyana District", "Xhariep District"};
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, fs);
spinDistrict.setAdapter(adapter2);
}
}
void populateLocal(){
//Baffalo City
if(dist == 1){
String [] bc = {"Buffalo City"};
ArrayAdapter<String> adapterL1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, bc);
spinLocal.setAdapter(adapterL1);
}
//Nelson Mandela Bay
else if(dist == 2){
String [] nmb = {"Nelson Mandela Bay"};
ArrayAdapter<String> adapterL2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, nmb);
spinLocal.setAdapter(adapterL2);
}
}