Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用setOnItemSelectedListener基于前两个微调器填充微调器_Android - Fatal编程技术网

Android 如何使用setOnItemSelectedListener基于前两个微调器填充微调器

Android 如何使用setOnItemSelectedListener基于前两个微调器填充微调器,android,Android,我有三个微调器,第一个是从字符串xml文件填充的,第二个应该基于第一个选择填充,第三个基于第二个选择填充 我在周末搜索并尝试了几种逻辑,但没有成功。在第二个和第三个微调器上设置setOnItemSelectedListener后,不会填充任何微调器 请帮帮我。下面提供了示例代码 public class Reg_Prop extends Activity implements AdapterView.OnItemSelectedListener { //create reference But

我有三个微调器,第一个是从字符串xml文件填充的,第二个应该基于第一个选择填充,第三个基于第二个选择填充

我在周末搜索并尝试了几种逻辑,但没有成功。在第二个和第三个微调器上设置setOnItemSelectedListener后,不会填充任何微调器

请帮帮我。下面提供了示例代码

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);
    }

}