5

Android アプリに複数のボタンがあります。Javaコードで、どのボタンがクリックされたかを知りたいです。私が知る限り、これは次のような単一の方法で達成されます。

public void onClick(View view) {
    // Do something
}

そして、そのメソッド内で、どのボタンがクリックされたかを把握する必要があります。あれは正しいですか?

もしそうなら、どちらがクリックされたかをどのように見分けることができますか? findViewById() によって返されるさまざまな Button オブジェクトがあります。どのボタンがクリックされたかを知るためにそれらを使用する方法がわかりません。

4

6 に答える 6

12

アクティビティ クラスに View の OnClickListner を実装します。クリック メソッドをオーバーライドします。

 Button b1= (Button) findViewById(R.id.button1);
//find your button id defined in your xml. 


b1.setOnClickListener(this);
// You have button OnClickListener implemented in your activity class.
//this refers to your activity context.

トーストメッセージを使用しました。

http://developer.android.com/guide/topics/ui/notifiers/toasts.html

 Toast.makeText(MainActivity.this,"button1", 1000).show();
 //display a toast using activity context ,text and duration

switch case を使用すると、どのボタンがクリックされたかを確認できます。

onClick メソッドで。

switch(v.getId())  //get the id of the view clicked. (in this case button)
{
case R.id.button1 : // if its button1
    //do something
    break;
}

これが完全なコードです。

public class MainActivity extends Activity implements OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button b1= (Button) findViewById(R.id.button1);
    Button b2= (Button) findViewById(R.id.button2);
    Button b3= (Button) findViewById(R.id.button3);
    b1.setOnClickListener(this);
    b2.setOnClickListener(this);
    b3.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId())
    {
    case R.id.button1 :
        Toast.makeText(MainActivity.this,"button1", 1000).show();
        break;
    case R.id.button2 :
        Toast.makeText(MainActivity.this,"button2", 1000).show();
        break;
    case R.id.button3 :
        Toast.makeText(MainActivity.this,"button3", 1000).show();
        break;  


    }

}
 }
于 2013-03-31T17:35:05.440 に答える
5

これを処理するにはさまざまな方法があります。今持っているもので使える

    public void onClick(View view) {
    // Do something
    view.getId();
}

の値を返しandroid:idますxml。ステートメントを使用しswitchて値を比較し、何をすべきかを決定して をオンにすることができますid。また、各 を使用onClick()してを割り当てることもできます。xmlbutton

<Button
    ...
    android:onClick="functionName"/>

次に、Javaコードで持つことができます

public void functionName(View view) {
        // Do something
    }

viewここをクリックbuttonするとonClickxml

于 2013-03-31T17:35:14.097 に答える
4

もしそうなら、どちらがクリックされたかをどのように見分けることができますか?

古い友達の切り替えは、あなたの目標を達成するのに役立ちます:

public void onClick(View view) {
   switch (view.getId()) {
      case R.id.btn1:
         // do your stuff for btn1
      break;
      case R.id.btn2:
         // do your stuff for btn2
      break;
      ...
   }
}

説明:各ウィジェットには、上記の in スイッチIDを介してどのボタンがクリックされたかを簡単に処理できるようにするための機能があります。ID

view.getId()IDウィジェットの返品。

于 2013-03-31T17:32:50.580 に答える
3

ボタンごとに匿名の内部クラスを使用することもできます。

Button b1= (Button) findViewById(R.id.button1);
Button b2= (Button) findViewById(R.id.button2);

b1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // button 1 was clicked!
    }
});
b2.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // button 2 was clicked!
    }
});
于 2013-03-31T17:46:50.537 に答える
1

ButterKnifeライブラリ ( http://jakewharton.github.io/butterknife/ )を使用できます。

//Fragment
@InjectView(R.id.dialog_userinput)
public EditText userinput;

@InjectView(R.id.dialog_passinput)
public EditText passinput;

@OnClick(R.id.dialog_login)
public void login(View view) {
    //do stuff
    this.dismiss();
}

@OnClick(R.id.dialog_cancel)
public void cancel(View view) {
    //do stuff
    this.dismiss();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.dialog_layout, container);
    ButterKnife.inject(this, view);
    return view;
}
于 2015-02-20T11:39:51.643 に答える