Android Studio - 一个函数 "know" 按下哪个按钮可以激活它?

Android Studio - Can a function "know" which button press activated it?

Image 我有 2 个按钮,A 和 B。我有一个函数,叫做 mystery()。按下按钮 A 和 B 时,都会激活 mystery(),但是如果按下按钮 A,mystery() 不知何故知道是按钮 A 激活了它,如果按下了按钮 B,mystery() 不知何故知道它是按钮B 激活它。如果是按钮 A 激活了 mystery(),mystery() 将停止应用程序,但如果是按钮 B 激活了 mystery(),mystery 将给玩家 100 美元。

那只是一个随机的例子,但基本上我要问的是:有没有办法将触发的按钮传递给函数?我知道我可以有两个函数,mysteryA 和 mysteryB,其中前者链接到 A,后者链接到 B,只需复制和粘贴,每个函数都略有不同,但是 must 是一种更有效的方法。

有什么想法吗?

是的,这是可能的(这里有一个 java 示例)

public class abc extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.example);
    }

    public void myMethod(View view) {
         //here, you can use something like view.getId() or anything else to identify which view called this method
      //you could do something like this :

     if (view.getId() == R.id.button2) {
         giveALocalNobody100Dollars();
     }else if (view.getId() == R.id.button3){
         giveItToHimEitherWayHeDeservesIt();
     }
    }
}

和你的 xml :

<Button
        android:text="Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button2"
        android:onClick="myMethod"/>
<Button
        android:text="Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button3"
        android:onClick="myMethod"/>

现在,在您的 onClickListener 中,myMethod 您可以访问一个 view,并且通过此视图,您可以确定哪个按钮调用了它

  • 函数可以“知道”按下哪个按钮激活它吗?

  • 有没有办法传递哪个按钮触发了一个函数?

    是的。 有很多方法可以知道该功能是否由特定按钮触发。

方法一: 你可以传递一个变量给函数,例如,

按钮 A 通过 mystery("A");

向其传递一个变量来触发 mystery()

按钮 B 通过 mystery("B");

向其传递变量来触发 mystery()

函数内部,

谜底:

private void mystery(String mode) {
System.out.println(mode); // Here mode contains A or B
}

方法二:现在你可以再次使用布尔类型的全局变量。

private boolean isButtonA;

现在您可以在按钮 A 的点击监听器中设置 isButtonA = true;,在按钮 B 的点击监听器中您可以设置 isButtonA = false;

这些只是少数简单的。如果我遗漏了一些更简单的东西,请随意提出一些建议 ;)