1

我在 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;
         }

任何人都可以帮忙吗?

4

2 回答 2

0

一种解决方案是定义一个带有函数的接口,DoSomethingToSpinner然后在您的主要活动中实现它

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

}

然后打电话interface.DoSomethingToSpinner,它应该可以解决你的问题。

于 2012-01-02T21:09:51.763 回答
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 对象只是用它“做事”(不鼓励),您可以使用

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

Spinner getSpinnerMember() { return spinner; }

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

解释

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

于 2015-07-31T09:53:29.067 回答