Android多个微调器更新

时间:2012-04-03 02:00:03

标签: java android android-spinner

好的,所以我正在开发一个Android应用程序。在我的一个应用程序的活动(称为转换)中,已经有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());
    }
}

我还有一个单独的类来处理我的第一个微调器选择。

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.
    }
}

我的问题很简单,但我还没有找到解决方法。 每当该活动开始时,一切都是预期的空白。但是,每当有人从主微调器 convertTopic 中选择一个选项时,第二个微调器就不会更新。

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

我想让它成为第二个微调器,一旦用户从主微调器中选择了某个东西,就会更新选择。我有什么方法可以用吗?是否涉及任何循环?

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

1 个答案:

答案 0 :(得分:0)

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

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