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

@SpeedBirdNine の回答を問題に適用するには。クラスをパッケージからアクセスできるようにする必要があります。これを行うには、追加できます

private MyClass instance;

クラスに追加し、それを初期化します

instance = this;

onCreate()。アクティビティにアクセスするための静的メソッドも必要です。

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 オブジェクト全体へのアクセスが提供されるため、パッケージ オブジェクトによる意図しないエラーから保護されません。

説明

他のクラスには、スピナーを含むアクティビティのハンドルがありません。アクティビティのインスタンスは一度に 1 つしかないため、グローバル ハンドルを に保存できますonCreate。これにより、そのスピナー オブジェクトへのアクセスが提供されます。

于 2015-07-31T09:53:29.067 に答える
0

1 つの解決策は、関数を使用してインターフェイスを定義し、DoSomethingToSpinnerそれをメイン アクティビティに実装することです。

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

}

それから電話interface.DoSomethingToSpinnerすると、問題が解決するはずです。

于 2012-01-02T21:09:51.763 に答える