8

アプリのいずれかのボタンを押すと音を鳴らそうとします。

アプリのすべてのボタンにリスナーを追加するためのマイナーな邪魔な方法はどのようになっていますか?

Androidの汎用リスナーを上書き(および拡張)することはできますか?

ありがとう。

4

6 に答える 6

4

すべてのボタンに 1 つのリスナーを設定でき、タグでも識別できます。

View.OnClickListener myClickLIstener= new View.OnClickListener() {
    public void onClick(View v) {
        String tag = (String) v.getTag();
        Log.e("","tag : "+tag)
       // your stuff
    }
};

リスナーを設定しています...

btn1.setOnClickListener(myClickLIstener);
btn1.setTag("btn1");
btn2.setOnClickListener(myClickLIstener);
btn2.setTag("btn2");

編集 :

こんなの探してるのか…

class superTop implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Log.e("", "onClick superTop");
        }

    }

    class NewClick extends superTop implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Log.e("", "onClick NewClick");

            super.onClick(v);

        }

    }

    findViewById(R.id.button1).setOnClickListener(new NewClick());

両方のリスナーを呼び出すことができます...

于 2013-02-17T16:36:55.243 に答える
3

あるいは単に

class YourClass implements OnClickListener{
    buttonOne.setOnclickListener(this);
    buttonTwo.setOnclickListener(this);
    buttonThree.setOnclickListener(this);

    public void onClick(View v){
        //do your stuff;
    }
}

または、必要に応じて、カスタム Button を作成します。

Class Yourbutton extends Button implements Button.OnClickListener{
    public Yourbutton(Context c) {
        super(c);
    }
    public Yourbutton(Context c,AttributeSet s){
        super(c,s);
    }
    public void onClick(View v){
        //do your stuff;
    }
}

これで、一般的なジョブを実行する一般的なボタンとして Yorkbutton を使用できるようになりました。

于 2013-02-17T16:25:26.973 に答える
2

これを行うには、最初にクラスに OnClickListener を実装させます

button1.setOnClickListener(this);
button2.setOnClickListener(this);

onClick メソッドで次の操作を行います。

public void onClick(View view) {


    switch(view.getId()){

//here you need the id of the button i.e. its id in the xml file
    case R.id.button1:
        // do whatever you want button1 to do
        break;
    case R.id.button2:
        // do whatever you want button2 to do
        break;
    }
}
于 2013-02-17T16:56:44.083 に答える
1

属性を使用できandroid:onClickます。次のように、同じ onClick メソッドをすべてに設定します。

<Button
[...]
android:onClick="handleButton"/>

<Button
[...]
android:onClick="handleButton"/>

そしてあなたのJavaファイルで:

public void handleButton(View v){
// do some stuff
}
于 2013-02-17T16:21:59.670 に答える
1

このようなワンクリックリスナーを作成し、同じことをしたい場合はすべてのボタンから呼び出します

View.OnClickListener yourClickListener = new View.OnClickListener() {
        public void onClick(View v) {
            //play the music
        }
    };

次に、そのリスナーを呼び出します

button1.setOnClickListener(yourClickListener);
button2.setOnClickListener(yourClickListener);
button3.setOnClickListener(yourClickListener);
于 2013-02-17T16:23:44.677 に答える
0

同じように動作させたいボタンの同じメソッドを呼び出します

<LinearLayout ...>
  <Button android:text="1" onClick="onButtonClicked" clickable="true" />
  <Button android:text="2" onClick="onButtonClicked" clickable="true" />
  <Button android:text="3" onClick="onButtonClicked" clickable="true" />
  <Button android:text="4" onClick="onButtonClicked" clickable="true" />
</LinearLayout>

上記の 4 つのボタンのテキストは異なりますが、onClick のメソッドは同じであるため、findViewById を使用して Java クラスでそれらを取得する必要はありません。

レイアウトが表示されているアクティビティで、メソッドを追加するだけです

public void onButtonClicked(View v){
     // do whatever needs to be done. For example:
     Toast.makeText(getApplicationContext(), ((Button) v).getText() + " clicked", Toast.LENGTH_SHORT).show(); 
}

2番目の方法

すべてに対して同じコードを繰り返す必要はありません。次のような一般的なリスナーを試すことができます。

private OnClickListener genericClickListener= new OnClickListener() { 
    public void Click(View v) {
            // do something
    } 
}; 

あとは、3 つのボタンすべてを登録して、この genericClickListener を使用するだけです。つまり、内部onCreate()で、

Button firstbtn  = (Button) findViewById(R.id.firstbtn); 
Button secondbtn = (Button) findViewById(R.id.secondbtn); 
Button thirdbtn  = (Button) findViewById(R.id.thirdbtn); 

firstbtn.setOnClickListener(genericClickListener);
secondbtn.setOnClickListener(genericClickListener);
thirdbtn.setOnClickListener(genericClickListener);

第三の方法

単一の関数/メソッドを作成し、すべてのボタンのonClickが同じを呼び出しますMethod/Function

于 2014-08-13T12:00:54.933 に答える