2012-02-09 2 views
4

は、ボタンがクリックされたときにリスナーに引数を渡すことが可能です:setOnClickListenerを呼び出すときに引数を渡しますか?

protected void onCreate(Bundle savedInstanceState) { 
    .... 

    String myArg = "Hello"; 
    Button button1 = (Button)findViewById(R.id.myButton); 
    button1.setOnClickListener(myListener); 

    String myArg = "Goodye"; 
    Button button2 = (Button)findViewById(R.id.myOtherButton); 
    button2.setOnClickListener(myListener); 
} 

OnClickListener clickListener = new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
      // print the value from the passed in argument myArg 
     Log.v("TEST", myArg);   
    } 
}; 

これはあくまでも一例ではなく、私が実際にやってwan'tが、それは問題を示して何をするかの反射です。

基本的にmyArgをリスナーに渡したいので、ボタンをクリックするとmyArg変数にアクセスできます。

私はこれをインラインの匿名クラスとして行うことができますが、私はたくさんのボタンを持ち、クリックロジックはすべて同じものです。それはボタンごとに異なるので、私は引数が必要です。

FYI:実際の使用では、引数がViewオブジェクトである必要があります。

+0

あなたは変数が束縛必要なのでしょうか?つまり、いつonClickListener()がアクセスできるようにする変数の値をいつ決めるのでしょうか? –

答えて

5

なぜ、View.OnClickListenerを実装するクラスを作成するだけではないのですか?これは、各ボタンのコードも再利用する場合には理想的です。通常は、その後

public class MyListener implements View.OnClickListener 
{ 
    private View mView; 

    public MyListener(View v) { 
     mView = v; 
    } 

    @Override 
    public void onClick(View v) { 
     // Use mView here if needed    
    } 
} 

そして、あなたのようにそれを使用します。

OnClickListener listener = new MyListener(myView); 
+0

その例を見ると分かります。私はかなりJavaとAndroidのプログラミングには新しく、Objective-cの経験が豊富だから、それでも私の頭の中にはいます。ありがとう! – Camsoft

6

私はこの種の問題が扱われている典型的なやり方は、クリック対象のIDのテストだと思う:

OnClickListener clickListener = new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     if (v.getId()==R.id.myButton) { 
      // 
     } elseif (v.getId()==R.id.myOtherButton) { 
      // 
     }  
    } 
}; 

それが不十分だ場合は、ビューの一般的なタグのプロパティを採用することができます。

Button button1 = (Button)findViewById(R.id.myButton); 
button1.setTag("Hello"); 
button1.setOnClickListener(myListener); 

Button button2 = (Button)findViewById(R.id.myOtherButton); 
button2.setTag("Goodye"); 
button2.setOnClickListener(myListener); 

... 
OnClickListener clickListener = new View.OnClickListener() { 

@Override 
public void onClick(View v) { 
     // print the value from the passed in argument myArg 
    Log.v("TEST", v.getTag());   
    } 
}; 

そして最後に、あなたも、複数のタグを設定することができます。

button1.setTag(R.id.arg1, "Hello"); 
button1.setTag(R.id.arg2, "World"); 

うあなたの目的に合った?

関連する問題