0

Androidのいくつかのボタンに複数のリスナーを追加する方法を教えてください。

  1. 共通のリスナーを 1 つ追加し、どのボタンがリスナーを呼び出したかを確認します。
  2. 複数の匿名リスナーを追加します。
  3. 呼び出されるいくつかのメソッドを追加します (XML onClick プロパティで説明されています)。

広告。1どのボタンがリスナーを呼び出したかを確認する方法(e.getSource()のように、eはイベントです)。この種のコードを取得しましたが、ボタンをフィールドとして保持するのは良くありません。どのように修正すればよいですか?3.オプションのデメリットは?

package com.example.fiszki;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.support.v4.app.NavUtils;


public class MainActivity extends Activity implements OnClickListener {
Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public void onClick(View arg0) {
    b.setText("kupa");      
}


}
4

2 に答える 2

1

1 と 2 の両方が最も一般的に使用されます。3が実装されているのはめったに見たことがありません。1 では、次のような if ステートメントが必要なボタンを区別してください。

if(arg0.getId() == R.id.buttonId)
{
//Code for this button
}
else if(arg0.getId() == R.id.buttonId2)
{
//Code for second button
}

等々。

個人的には、特にレイアウトに多くのボタンがある場合に、コードがどのボタンに属しているかを簡単に知ることができるため、2 番目のオプションを好みます。

于 2012-07-01T23:18:44.320 に答える
0

私は可能であれば#3を好みますが、IMHO、それはよりきれいです。例えば

<Button android:id="@+id/button1" android:onClick="onButtonClicked" />
<Button android:id="@+id/button2" android:onClick="onButtonClicked" />
<Button android:id="@+id/button3" android:onClick="onButtonClicked" />

次に、アクティビティで

public void onButtonClicked(View v) {
    switch (v.getId()) {
       case R.id.button1:
         break;
       case R.id.button2:
         break;
       case R.id.button3:
         break;
    }
}

ただし、これは新しい Fragment デザイン パターンでは機能しません。Fragment を使用している場合は、オプション #1 または #2 を使用してください。

于 2012-07-02T00:53:26.337 に答える