【问题标题】:Getting id of programmatically generated grid of buttons in Android获取Android中以编程方式生成的按钮网格的ID
【发布时间】:2010-06-28 13:41:44
【问题描述】:

我有一个与here 发布的类似的查询。我在运行时(在 TableLayout 中)创建了一个由可变数量的按钮组成的网格,并希望找到按下的按钮的索引。实际的 Button 对象当前存储在一个数组中,尽管我不确定这是否真的有必要。我尝试使用以下内容编写 ClickListener:

public void onClick(View view) {

       Button clickedButton = (Button) view;
               int buttonID = clickedButton.getId();

但这总是返回-1。是否可以在不预先定义 xml 中的按钮的情况下获取 id(或其他对按下按钮的引用)?

另一篇文章中的解决方案描述了循环遍历整个按钮数组并比较 id。有没有更优雅的方法来做到这一点?

【问题讨论】:

    标签: android layout


    【解决方案1】:

    您可以通过this method为动态创建的小部件手动设置ID。

    【讨论】:

    • 谢谢,这正是我想要的。
    【解决方案2】:

    鉴于您有参考资料,您不需要 id。

        final Button b1 = new Button(this);
        final Button b2 = new Button(this);
        final Button b3 = new Button(this);
        Button[] buttons = new Button[] { b1, b2, b3 };
        OnClickListener listener = new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                if (v == b1) {
                    // TODO
                } else if (v == b2) {
                    // TODO
                } else if (v == b3) {
                    // TODO
                }
            }
        };
        for (Button b : buttons) {
            b.setOnClickListener(listener);
        }
    

    【讨论】:

    • 所以对于一个大网格(10x10),您只需使用 for 循环并循环检查引用吗?我应该担心这会对性能造成任何影响吗?感谢您的帮助。
    • 这种检查速度应该非常快。
    【解决方案3】:

    如果有人需要这个,这是我更喜欢做的。监听器也是一个类,所以你可以为它创建实例变量。

    new Listener(id) {
    
      private int id;
    
      public Listener(int id) {
        this.id = id;
      }
    
      private void onClick(View view) {        
        buttonID = id;
      }
    
    }
    

    在监听器之外声明 buttID 的地方。可以通过将侦听器作为单独的类移到类之外来改进此解决方案,以避免内存泄漏。

    处理无泄漏侦听器的另一种方法是将侦听器定义为嵌套类,方法是在包含类中声明它public/private static class Listener,但这会导致int id 在这种情况下每次都被覆盖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 2011-09-03
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      相关资源
      最近更新 更多