从微调器中检索整数值

时间:2018-05-23 16:56:51

标签: android android-spinner

我有两个spiners,第一个微调器是一个Integer数组,第二个是2D字符串数组。

ArrayAdapter adapter1,adapter3;
String selectedsection;
Integer selectedsem;
Integer[] semester= new Integer[] {1, 2, 3, 4, 5};
String[][] subject=new String[][]{{"m1"},{"m2"},{"m3"},{"m4"},{"m5"},{"m6"},{"m7"},{"m8"}};
    adapter1 = new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_item, semester);
    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_item);
    sp1.setAdapter(adapter1);
    sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            selectedsem = (Integer)parent.getItemAtPosition(position);
            Toast.makeText(getApplicationContext(),String.valueOf(selectedsem),Toast.LENGTH_SHORT).show();
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {}
    });

adapter3 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, subject[selectedsem]);
    adapter3.setDropDownViewResource(android.R.layout.simple_spinner_item);
    sp3.setAdapter(adapter3);
    sp3.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            selectedsubject = parent.getItemAtPosition(position).toString();
            Toast.makeText(getApplicationContext(),String.valueOf(selectedsem),Toast.LENGTH_SHORT).show();
            Toast.makeText(getApplicationContext(), selectedsubject, Toast.LENGTH_SHORT).show();
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {}
    });

应用程序崩溃,因为找不到selectedsem的值。那么,如何从第一个微调器获取selectedsem的值在第二个微调器中使用它。 希望这个问题能被理解!

3 个答案:

答案 0 :(得分:0)

尝试在另一个函数中创建第二个适配器并在第一个适配器生成后立即调用它,我的意思是尝试安排两个任务不是异步而不是异步

答案 1 :(得分:0)

原因是因为它是Integer它可以为null并且你在初始化时尝试使用它并且还没有选择任何东西你可能会得到nullpointerexception所以最好在初始化时给它一个默认值0或者什么

然后在用户选择项目后为第二个微调器创建适配器。

您可以将第二个适配器创建在onItemSelected

sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        selectedsem = semester[parent.getSelectedItemPosition()];
        //second adapter code goes here
       ArrayAdapter<String> adapterNew = new ArrayAdapter<String>(YourActivity.this, android.R.layout.simple_spinner_item, subject[selectedsem]);
       sp3.setAdapter(adapterNew);
        Toast.makeText(getApplicationContext(),String.valueOf(selectedsem),Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onNothingSelected(AdapterView<?> parent) {}
});

我们只是在用户在(OnItemSelected)第一个微调器中选择一些值之后更新第二个微调器。

答案 2 :(得分:0)

这种情况正在发生,因为第一个微调器/的方法onItemSelected只有在微调器实际被用户选中时才会被调用。因此,当您尝试实例化OnItemSelectedListener时,adapter3仍然为空。要解决此问题,您必须将所有代码放在预期selectedsem之后才能获得值,就在实际获取值之后,即:selectedsem方法内部。像这样:

onItemSelected