8

当您按下应用程序的任何按钮时,我会尝试播放声音。

将侦听器添加到应用程序中的所有按钮的次要侵入方式如何?

我可以添加覆盖(和扩展)Android 的通用监听器吗?

谢谢。

4

6 回答 6

4

您可以为所有按钮设置一个侦听器,也可以使用标签进行识别。

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>

以上四个按钮有不同的文本,但 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(); 
}

第二种方法

您无需为所有人​​重复相同的代码。您可以尝试一个通用的侦听器,例如:

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

然后你所要做的就是注册所有三个按钮来使用这个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 回答