【问题标题】:android: how to elegantly set many button IDsandroid:如何优雅地设置许多按钮 ID
【发布时间】:2011-09-24 03:25:22
【问题描述】:

我的活动中有很多按钮(一次只能看到其中的一部分)。我目前有这样丑陋的东西:

buttonID[0] = R.id.buttonr1b1;
buttonID[1] = R.id.buttonr1b2;
buttonID[2] = R.id.buttonr1b3;
buttonID[3] = R.id.buttonr1b4;
...
buttonID[35] = R.id.buttonr1b36;

for (int i = 0; i < 36; i++) {
    button[i] = (Button) findViewById(buttonID[i]);
}

有没有更优雅的方式来引用所有 R.id.buttonXXX ?它看起来如此错误和丑陋。 谢谢。

【问题讨论】:

    标签: android view


    【解决方案1】:

    你的直觉是正确的。这很丑,一般来说,如果你发现自己想要这样做,你应该重新考虑你的设计。

    如果您的按钮是统一的,以至于您想循环它们以执行类似的操作,那么它们可能足够统一,可以首先以编程方式生成(并且您可以在创建它们时存储引用)或使用某种形式的AdapterView。每个按钮需要关联哪些数据?可以直接使用 setTag/getTag 关联吗?您是否需要在此处使用 ID?

    【讨论】:

    • 很有可能,但是如果视图数量是恒定的并且数据永远不会改变,那可能是矫枉过正。
    • 这个周末我会看看 setTag/getTag。这看起来是个好建议。谢谢。
    • 请注意,您可能需要单参数 setTag,而不是采用 ID 键的重载。需要钥匙的人有一些陷阱。
    【解决方案2】:

    我不确定这是更优雅还是更不优雅,因为您将失去对 ID 的编译时检查。但是,您可以按名称构造 ID:

    final static String PREFIX = "buttonr1b";
    ...
    Resources res = getResources();
    for (int i = 0; i < 36; i++) {
        int resID = res.getIdentifier(PREFIX + i , "id", getPackageName());
        button[i] = (Button) findViewById(resID);
    }
    

    注意:确保“getPackageName()”将为您的 R 类返回适当的包,否则明确指定。

    【讨论】:

    • 这是对我的具体问题的非常具体的回答。谢谢。
    • 其实只是一个小小的说明。要获取按钮 ID,它看起来更像 res.getIdentifier(PREFIX + i, "id", getPackageName());
    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 2010-10-14
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    相关资源
    最近更新 更多