0

私はAndroidアプリを持っており、そのメインアクティビティに変数(楽器)を渡す必要があります。簡単な質問のように思えるかもしれませんが、私は混乱します。周りを見回してみると、getInstrumentメソッドを作成するのは良い考えのように思えることにすでに気づきました。これは私がこれまでにしたことです:

public class MainActivity extends Activity{
//I need to read the instrument variable here
    public void addListenerOnSpinnerItemSelection(){

        instrumentSp = (Spinner) findViewById(R.id.instrument);
        instrumentSp.setOnItemSelectedListener(new CustomOnItemSelectedListener());

    }
}

別のクラス(別のファイル内):

public class CustomOnItemSelectedListener implements OnItemSelectedListener {

private int instrument;

  public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
    Toast.makeText(parent.getContext(), 
        "Please wait a minute for the instrument to be changed. ", Toast.LENGTH_SHORT).show();
        //"Item : " + parent.getItemAtPosition(pos).toString() + " selected" + pos,
        //Toast.LENGTH_SHORT).show();
     instrument = pos;
  }


  public int getInstrument(){
      return instrument;
  }

}

ただし、オブジェクトはリスナー内にのみ存在するため、メインアクティビティからgetInstrument()メソッドを呼び出すことはできないと思います。それを回避するための本当に簡単な方法があるはずです。いくつかの投稿を読みましたが、問題はクラスのオブジェクトが実際には存在しないことのようです。洞察をありがとう。

4

3 に答える 3

1

リスナーへの参照がある場合は、そのメソッドを呼び出すことができるはずです。

CustomOnItemSelectedListener listener = new CustomOnItemSelectedListener();
instrumentSp.setOnItemSelectedListener(listener);
....
int instrumentValue = listener.getInstrument();
于 2012-11-28T16:32:08.407 に答える
1

あなたはこれを試すことができます:

public class MainActivity extends Activity{
   //I need to read the instrument variable here
   CustomOnItemSelectedListener MyListener = new CustomOnItemSelectedListener();

   public void addListenerOnSpinnerItemSelection(){

     instrumentSp = (Spinner) findViewById(R.id.instrument);
     instrumentSp.setOnItemSelectedListener(MyListener);  
   }
}
于 2012-11-28T16:29:54.683 に答える
0

のグローバルインスタンスを作成します

CustomOnItemSelectedListener listener;
int instrument;
public void onCreate(Bundle b){
    listener = new CustomOnItemSelectedListener();
    instrument = listener.getInstrument();
}

これはMainActivityクラスにあります

于 2012-11-28T16:33:05.497 に答える