【问题标题】:Knowing which button was clicked in Android知道在 Android 中点击了哪个按钮
【发布时间】:2017-11-17 22:30:32
【问题描述】:

我正在制作一个应用程序,它将在同一布局上包含 81 个按钮。它们都被称为我创建的名为“Tile”的对象。问题是这些图块存储在一个数组中,因此我需要知道以 int 格式单击了哪个按钮才能调用图块(tiles[??])。我正在使用onClick(View v) 方法。我也试过这个:

Log.i("Tile", v.getId() + "was clicked")

它在 logcat 中给我的结果是一个非常长的整数。

那么我怎样才能知道哪个按钮以数字格式被点击了呢?随便的 id (R.id.tile1) 和这个长整数有什么关系,因为它已经是一个数字了?

PS:我知道我可以使用 Switch 将每个 id 分配给一个整数,但是由于它们是 81,这将是浪费时间并且会使代码变得非常复杂。

【问题讨论】:

  • 为什么不用postion来判断点击的是哪个按钮呢?
  • 我不明白,请您提供更多详细信息。谢谢;)
  • 您正在使用点击监听器,例如:tiles[i].setOnClickListener(this);对吗?
  • 我认为您应该使用带有按钮自定义布局的 GridView。通过它您可以轻松获得单击哪个按钮的位置....顺便说一下,如果您对按钮感到满意,那么您必须在按钮的 onClick() 中进行切换条件并像 v.getId()==R 进行比较.id.tile1,它将为您提供确切的值作为您单击的按钮的 id。
  • @PhilippeSarouphim 在您的 xml 文件中设置“android:tag=1”的简单解决方案..等等所有按钮最多为 81。现在实现 OnClickListerner。在 OnClickListener 中编写 view.getTag() ,它会返回您的按钮编号,现在您可以轻松执行操作了。

标签: java android android-button


【解决方案1】:

我希望你可以使用标签选项。您可以通过 view.setTag(1) 为视图设置标签,然后在点击事件时,您可以使用 view.getTag() 取回标签集。

【讨论】:

  • 谢谢。有没有办法按标签查找视图?
  • 是的,它的工作正常。但是,就像我们通过它的 id 来引用一个对象一样,有没有办法通过它的标签来引用它?
【解决方案2】:

在 android 中,我们可以使用按钮的 id 在点击监听器中获取点击事件。
假设您有 5 个按钮: 确保您的 Activity/Fragment 实现 OnClickListener

// 在 OnCreate 中

  Button mClickButton1 = (Button)findViewById(R.id.clickButton1);
  mClickButton1.setOnClickListener(this);
  Button mClickButton2 = (Button)findViewById(R.id.clickButton2);
  mClickButton2.setOnClickListener(this);
  Button mClickButton3 = (Button)findViewById(R.id.clickButton3);
  mClickButton3.setOnClickListener(this);
  Button mClickButton4 = (Button)findViewById(R.id.clickButton4);
  mClickButton4.setOnClickListener(this);
  Button mClickButton5 = (Button)findViewById(R.id.clickButton5);
  mClickButton5.setOnClickListener(this);</br>

//在此之后,您将覆盖 OnClickListener 中的 onclick 方法

public void onClick(View v) {
  switch (v.getId()) {
      case  R.id.clickButton1: {
        // do something for button 1 click
        break;
      }
      case R.id.clickButton2: {
        // do something for button 2 click
        break;
      }

    //.... etc
   }
}

【讨论】:

  • 这涉及写一个switch,其中包含81个案例
  • 是的,如果您有 81 个按钮,那么您必须为此编写 81 个案例。
  • 整个问题的目的是想办法避免81次重复。
  • 因此,您必须将所有按钮放在父布局中,并在不使用开关盒的情况下单击按钮获取子 ID。
【解决方案3】:

您可以使用 button.setTag(position) 将位置设置为标签。

当调用 onclick 时获取该标记值。

public void onclick(View v){
  int position = Integer.parseInt(v.getTag().toString());
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2014-08-31
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多