【问题标题】:Android Studio - Can a function "know" which button press activated it?Android Studio - 功能可以“知道”按下哪个按钮激活它吗?
【发布时间】:2019-08-13 05:14:07
【问题描述】:

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

这只是一个随机的例子,但基本上我要问的是:有没有办法通过什么按钮触发一个函数?我知道我可以有两个函数,神秘 A 和神秘 B,其中前者与 A 相关联,后者与 B 相关联,只需复制和粘贴,每个函数都有细微的变化,但 必须是一种更有效的方法。

有什么想法吗?

【问题讨论】:

  • 将标签添加到按钮或一些已知的字符串/int并将其传递给函数?神秘(whichButton:字符串)
  • 您可以使用 boolean 标志进行检查
  • @Smashing another SA dev :D

标签: android function android-studio android-intent android-button


【解决方案1】:

是的,有可能(这是一个 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,通过此视图,您可以确定调用它的按钮

【讨论】:

  • 嗯好吧我明白你在说什么。那么如何访问视图呢?喜欢(如果视图 == 某些东西)?或者我如何使用视图来确定调用它的按钮是我想问的。
  • 在我的更新中,我包含了一条评论,其中一种方法是使用view.getId,然后您可以简单地检查调用它的视图的 ID
  • 更新了一个更好的例子,很高兴帮助@Evan :)
【解决方案2】:
  • 一个函数能否“知道”哪个按钮按下激活了它?

    是的

  • 有没有办法通过什么按钮触发功能?

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

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

按钮 A 通过mystery("A"); 向其传递变量来触发mystery()

按钮 B 通过mystery("B") 向其传递变量来触发mystery()

函数内部,

谜底:

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

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

private boolean isButtonA;

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

这些只是几个简单的。如果我错过了一些更容易的东西,请随意提出一些建议;)

【讨论】:

    猜你喜欢
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多