Java Android多微调器更新

Java Android多微调器更新,java,android,android-spinner,Java,Android,Android Spinner,好的,我正在开发一个android应用程序。在我的一个应用程序活动(称为convert)中,已经有3个空白微调器(我们暂时忽略第三个)。一个主微调器允许用户决定温度、压力或体积等主题 public class Convert extends Activity{ String category = MySingleton.getInstance().getCategory(); protected DataStorage appState; public void onCr

好的,我正在开发一个android应用程序。在我的一个应用程序活动(称为convert)中,已经有3个空白微调器(我们暂时忽略第三个)。一个主微调器允许用户决定温度、压力或体积等主题

public class Convert extends Activity{
    String category = MySingleton.getInstance().getCategory();
    protected DataStorage appState;
    public void onCreate(Bundle icicle){
        super.onCreate(icicle);
        setContentView(R.layout.convert);

        appState = (DataStorage)getApplication();

        // Category Info
        Spinner convertTopic = (Spinner) findViewById(R.id.convertTopic);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.convertTopic_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        convertTopic.setAdapter(adapter);

        category = MySingleton.getInstance().getCategory();
        // Subcategory Info
        Spinner inputUnit = (Spinner) findViewById(R.id.inputUnit);
        ArrayAdapter<CharSequence> adapter2;
        adapter2 = ArrayAdapter.createFromResource(this, R.array.blank_array, android.R.layout.simple_spinner_item);
        if(category.equals("Temperature"))
            adapter2 = ArrayAdapter.createFromResource(this, R.array.convertUnitTemperature_array, android.R.layout.simple_spinner_item);
        else if(category.equals("Pressure"))
            adapter2 = ArrayAdapter.createFromResource(this, R.array.convertUnitPressure_array, android.R.layout.simple_spinner_item);
        else if(category.equals("Volume"))
            adapter2 = ArrayAdapter.createFromResource(this, R.array.convertUnitVolume_array, android.R.layout.simple_spinner_item);

        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        inputUnit.setAdapter(adapter2);

        convertTopic.setOnItemSelectedListener(new OnTopicSelectedListener());
    }
}
公共类转换扩展活动{
字符串category=MySingleton.getInstance().getCategory();
受保护的数据存储状态;
创建公共空间(捆绑冰柱){
超级冰柱;
setContentView(R.layout.convert);
appState=(数据存储)getApplication();
//类别信息
微调器convertTopic=(微调器)findViewById(R.id.convertTopic);
ArrayAdapter=ArrayAdapter.createFromResource(这个,R.array.convertTopic\u数组,android.R.layout.simple\u微调器\u项);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
convertTopic.setAdapter(适配器);
category=MySingleton.getInstance().getCategory();
//子类别信息
微调器inputUnit=(微调器)findViewById(R.id.inputUnit);
阵列适配器2;
adapter2=ArrayAdapter.createFromResource(这个,R.array.blank\u数组,android.R.layout.simple\u微调器\u项);
如果(类别等于(“温度”))
adapter2=ArrayAdapter.createFromResource(这个,R.array.convertUnitTemperature\u数组,android.R.layout.simple\u微调器\u项);
否则,如果(类别等于(“压力”))
adapter2=ArrayAdapter.createFromResource(这个,R.array.convertUnitPressure\u数组,android.R.layout.simple\u微调器\u项);
否则,如果(类别等于(“体积”))
adapter2=ArrayAdapter.createFromResource(这个,R.array.convertUnitVolume\u数组,android.R.layout.simple\u微调器\u项);
adapter2.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
inputUnit.setAdapter(适配器2);
convertTopic.setOnItemSelectedListener(新的OnTopicSelectedListener());
}
}
我还有一个单独的类来处理我的第一个微调器选择

public class OnTopicSelectedListener implements OnItemSelectedListener{
    String category = MySingleton.getInstance().getCategory();
    protected DataStorage appState;

    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){
        if(parent.getItemAtPosition(pos).toString().length() != 0){
            Toast.makeText(parent.getContext(), "Working with " +
                parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
        }
       category = parent.getItemAtPosition(pos).toString();
       MySingleton.getInstance().setCategory(category);
    }

    @SuppressWarnings("rawtypes")
    public void onNothingSelected(AdapterView parent){
        // Do nothing.
    }
}
OnTopicSelectedListener上的公共类实现OnItemSelectedListener{
字符串category=MySingleton.getInstance().getCategory();
受保护的数据存储状态;
已选择公共位置(AdapterView父项、视图、整数位置、长id){
if(parent.getItemAtPosition(pos.toString().length()!=0){
Toast.makeText(parent.getContext(),“正在使用”+
parent.getItemAtPosition(pos.toString(),Toast.LENGTH_LONG.show();
}
category=parent.getItemAtPosition(pos.toString();
MySingleton.getInstance().setCategory(类别);
}
@抑制警告(“原始类型”)
未选择公共无效(AdapterView父级){
//什么也不做。
}
}
我的问题很简单,但我还没有找到解决办法。 每当该活动开始时,一切都会如预期的那样空白。但是,每当有人从主微调器主题中选择一个选项时,第二个微调器将不会更新

我要更新第二个微调器的唯一方法是返回到上一个活动并返回到转换活动。主微调器将再次显示为空白,但第二个微调器将更新

我想让第二个微调器在用户从主微调器中选择某个内容时立即更新选择。有什么方法可以让我做到这一点吗?是否涉及任何循环


如果我的问题不清楚,我道歉。这是我第一次在这个网站上提问。

与其将
OnItemSelectedListener
作为一个单独的类,不如将其作为
Convert
的内部类。然后使微调器变量成为
Convert
的成员,而不仅仅是
onCreate
中的局部变量。现在,您的内部类将可以直接访问第二个微调器,从而允许您从
onItemSelected
方法中操作它


对于内部类的非android解释,您可以参考Java教程。

谢谢,我不知道内部类。我是否也在onCreate方法之外声明适配器对象?应用程序现在崩溃了。对。您需要能够从侦听器访问的所有内容都应该声明为活动的成员。您应该只使用onCreate来初始化和设置它们。好了,现在我可以从内部类操作微调器了。然而,我似乎无法使用它更新数据。我尝试了adapter2=ArrayAdapter.createFromResource(这个,R.array.convertUnitVolume\u数组,android.R.layout.simple\u微调器\u项);从onItemSelected方法,但它不允许。描述资源路径位置类型类型类型ArrayAdapter类型中的createFromResource(Context,int,int)方法不适用于参数(Convert.OnTopicSelectedListener,int,int)无需考虑,谢谢。我想得不够。我所需要做的就是在此之前创建另外三个适配器,然后使用.setAdapter(adapter3)方法。