从另一个类访问Spinner

时间:2012-01-02 21:06:12

标签: android spinner android-spinner

我在onCreate函数中创建了一个微调器。这是代码:

    Spinner spinner = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.weight_array, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());

现在我想从另一个类访问微调器。我想要做的是在完成方法时将微调器选择设置为位置0。我估计我必须使用类似的东西:

    spinner.setselection(0);

但是在创建微调器的类之外执行此操作并不起作用。以下是我试图访问微调器的代码部分:

public void onClick(DialogInterface dialog, int item) 
{
    switch(item) 
    {
        case 0:
        {
            float valueInput = Float.parseFloat(valueEntered.getText().toString());
                    valueEntered.setText(String.valueOf(convertKilosToGrams(valueInput)));
                    ///This is where i want to to access the spinner///
             break;
         }

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

一种解决方案是使用函数DoSomethingToSpinner定义一个接口,然后在主活动中实现它

public void DoSomethingToSpinner (some_parameter)
{
     spinner.setselection(some_parameter);
     // do your work here

}

然后拨打interface.DoSomethingToSpinner,它应该可以解决您的问题。

答案 1 :(得分:0)

应用@ SpeedBirdNine对问题的回答。您需要使您的类包可访问。为此,您可以添加

private MyClass instance;

到你的班级,然后用

初始化它
instance = this;
onCreate()中的

。您还需要一个静态方法来访问Activity,如

static Activity getInstance() { return instance; }

这样你就可以打电话了

Activity.getInstance().DoSomethingToSpinner(parameter);

更易于访问

为了使其更易于访问,您可以定义静态函数

static void doSomethingToSpinner(parameter) {
    getInstance().DoSomethingToSpinner(parameter);
}

可以从任何地方访问。

请给我Spinner

如果你想访问Spinner对象只是用它做“做事”(不鼓励),你可以使用

static Spinner getSpinner() { return getInstance().getSpinnerMember(); }

Spinner getSpinnerMember() { return spinner; }

这为调用类提供了对整个Spinner对象的访问权限,因此无法防止包对象发生意外错误。

解释

另一个类没有处理包含Spinner的Activity。由于一次只有一个活动实例,您可以在onCreate中保存全局句柄。然后,它可以提供对其微调器对象的访问。