使用字符串代替 ID 的引用控件

发布于 2024-10-16 19:23:08 字数 307 浏览 4 评论 0原文

引用 android 控件的典型方法是这样的:

TextView tv = (TextView)findViewById(R.id.tv);

其中 R.id.tv 是引用我的 xml 控件的整数。

问题是我想使用字符串“R.id.tv”进行参考。这可能吗?

假设我有多个控件:

tv1,
tv2,
tv3,
tv4,
tv5,

我如何将其放入某种循环中并通过控件进行交互。我想我会使用循环计数器来引用不同的控件。那要怎么做呢?谢谢。

Typical way to reference android control is something like this:

TextView tv = (TextView)findViewById(R.id.tv);

Where R.id.tv is integer referencing my xml control.

The thing is I would like to make reference using string "R.id.tv". Is that possible?

Let's say I have multiple controls:

tv1,
tv2,
tv3,
tv4,
tv5,

How would I put this into some sort of loop and interate through controls. I am thinking I would use loop counter to reference different controls. How's that to be done? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

若有似无的小暗淡 2024-10-23 19:23:08

一种方法是将 ids 放入数组中并通过下标引用。

int[] ids = { R.id.tv1, R.id.tv2 /* etc. */ };
for (int i = 0; i < ids.length; ++i) {
    TextView tv = (TextView)findViewById(ids[i]);
}

One approach is to put the ids into an array and reference by subscript.

int[] ids = { R.id.tv1, R.id.tv2 /* etc. */ };
for (int i = 0; i < ids.length; ++i) {
    TextView tv = (TextView)findViewById(ids[i]);
}
无风消散 2024-10-23 19:23:08

接下来尝试

private int getIdResourceByName(String aString)
{
  String packageName = "com.myProject.myPackage"; // set your package name here
  int resId = getResources().getIdentifier(aString, "id", packageName);
  return resId;
}

...

  for (int i = 1; i<=5; i++) {
      TextView tv = (TextView) findViewById(getIdResourceByName("tv" + Integer.toString(i)));
      ...
     }

Try next

private int getIdResourceByName(String aString)
{
  String packageName = "com.myProject.myPackage"; // set your package name here
  int resId = getResources().getIdentifier(aString, "id", packageName);
  return resId;
}

...

  for (int i = 1; i<=5; i++) {
      TextView tv = (TextView) findViewById(getIdResourceByName("tv" + Integer.toString(i)));
      ...
     }
属性 2024-10-23 19:23:08

我不明白你为什么要这样做,它非常丑陋,效率低下,并且可能会导致维护问题和错误。

为什么不使用集合(例如ArrayList)来存储对所有控件的引用?

I don't understand why you'd want to do this, it's pretty ugly, inefficient, and likely to cause maintenance issues and bugs.

Why not use a collection (e.g. ArrayList) to store references to all the controls?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文