Java 一个用于片段中多个按钮的OnClick处理程序

Java 一个用于片段中多个按钮的OnClick处理程序,java,android,android-fragments,onclick,android-button,Java,Android,Android Fragments,Onclick,Android Button,我有3个按钮在一个片段中,我想使用相同的点击事件。如何在一个片段内实现这一点 XML 错误 @片段Java类中的重写将以红色下划线,并返回以下错误 此处不允许添加注释 我希望所有3个按钮的onClick事件都相同您试图覆盖的方法是什么?是否有任何父类有方法btnClick\u DoSomething?从布局XML设置单击侦听器时,不需要重写任何内容。只需确保将使用此布局的activity类中存在一个名称相同的方法,该方法的返回类型为void,其唯一参数为View 区分同一onClick处理程序中

我有3个按钮在一个片段中,我想使用相同的点击事件。如何在一个片段内实现这一点

XML

错误

@片段Java类中的重写将以红色下划线,并返回以下错误

此处不允许添加注释


我希望所有3个按钮的onClick事件都相同

您试图覆盖的方法是什么?是否有任何父类有方法btnClick\u DoSomething?从布局XML设置单击侦听器时,不需要重写任何内容。只需确保将使用此布局的activity类中存在一个名称相同的方法,该方法的返回类型为void,其唯一参数为View

区分同一onClick处理程序中不同视图的单击的一般方法是通过id来标识它们

public void btnClick_DoSomething(View v){
    switch(v.getId()){
         case R.id.btn_1:
               // handle click from button 1
               break;
         case R.id.btn_2:
               // handle click from button 2
               break;
         case R.id.btn_3:
               // handle click from button 3
               break;
    }
}

您不需要编写@Override注释,因为您没有重写该方法。只用

public void btnClick_DoSomething(View v) {


}

您将在运行时收到此方法中的回调。

这里有一些误解。要覆盖单击事件,您的片段需要实现View.OnClickListener接口,如下所示:

public class YourFragment extends Fragment implements View.OnClickListener{

  @Override
  public void onClick(View v) {

  }
}
请注意,该方法的名称必须是onCLick,必须返回void,并接收一个视图作为要从接口重写的参数。在这种情况下,您需要为片段中的每个按钮设置一个侦听器:

btn1 = (Button) view.findViewById(R.id.btn_1);
btn1.setOnClickListener(this);
在这个方法中,你可以控制哪个对象被它的ID点击了

 @Override
      public void onClick(View v) {
        int id = v.getId();
       switch(v.getId()){
         case R.id.btn_1:
               // handle click from button 1
               break;
         case R.id.btn_2:
               // handle click from button 2
               break;
         case R.id.btn_3:
               // handle click from button 3
               break;
         }
      }
或者,您不需要重写该方法,因此删除将正常工作的anotation即可:

   public void btnClick_DoSomething(View v) {
            switch(v.getId()){
             case R.id.btn_1:
                   // handle click from button 1
                   break;
             case R.id.btn_2:
                   // handle click from button 2
                   break;
             case R.id.btn_3:
                   // handle click from button 3
                   break;
             }
         }

您不需要使用XML,而是使用Java:

<Button
    android:id="@+id/btn_1"
    android:text="@string/one"/>

<Button
    android:id="@+id/btn_2"
    android:text="@string/two"/>

<Button
    android:id="@+id/btn_3"
    android:text="@string/three"/>

与在xml布局文件中声明onClick方法不同,您可以让片段实现View.onClickListener接口,重写onClick,并将所有3个按钮都设置为onClickListener,如btn.setonclicklistener所示。将所有3个按钮所需的行为放在onClick中。除非您在onClick中检查事件来自哪个按钮,否则所有3个按钮都将具有相同的行为

我希望onClick事件对于编辑我的答案的所有3个按钮都是相同的。通过这种方式,您可以为所有3个按钮处理相同的onClick事件。这需要转到哪里?onCreateView/onActivityCreated/其他地方?它是一个单独的方法。只需将它写在onCreateViews下面,我希望所有3个按钮的onClick事件都是相同的。只需移除开关我希望所有3个按钮的onClick事件都相同所以,执行回滚我希望所有3个按钮的onClick事件都相同buttons@MacaronLover这就是我的答案。点击三个按钮中的任何一个都会调用btnClick_DoSomething。。。作用无论按下哪个按钮,您是否希望执行完全相同的操作?在这种情况下,您可以完全删除switch语句,只需在btnClick\u DoSomething函数中执行所需的任何操作。
   public void btnClick_DoSomething(View v) {
            switch(v.getId()){
             case R.id.btn_1:
                   // handle click from button 1
                   break;
             case R.id.btn_2:
                   // handle click from button 2
                   break;
             case R.id.btn_3:
                   // handle click from button 3
                   break;
             }
         }
<Button
    android:id="@+id/btn_1"
    android:text="@string/one"/>

<Button
    android:id="@+id/btn_2"
    android:text="@string/two"/>

<Button
    android:id="@+id/btn_3"
    android:text="@string/three"/>
private final OnClickListener onClick = new OnClickListener(){
   @Override
   public void onClick(View view){
       switch(view.getId()){
           ... cases...
       }
   }


    somewhere initialising the views you do:
    fragmentView.findViewById(R.id.btn_1).setOnClickListener(onClick);
    fragmentView.findViewById(R.id.btn_2).setOnClickListener(onClick);
    fragmentView.findViewById(R.id.btn_3).setOnClickListener(onClick);

}