【问题标题】:Is there a way to set setContentView(int id) dynamically?有没有办法动态设置 setContentView(int id) ?
【发布时间】:2011-11-24 10:01:42
【问题描述】:

我希望能够遍历 xml 布局文件列表,而不必在 setContentView 参数中指定特定文件。

显然类型不正确,但类似于:

ArrayList<String> pages = new ArrayList<String>();
//(Where each of the xml pages are stored like R.layout.page1, R.layout.page2, etc)
setContentView(pages.get(0));

这有可能吗?

【问题讨论】:

  • 你想要达到什么样的视觉效果?
  • @Sergey Rudchenko 我只需要能够根据需要加载尽可能多的 xml 布局文件并循环显示它们,而无需为每个文件编写单独的活动类。
  • 这可能是某种可重用的活动类。但仍不清楚目标是什么。
  • 这是一种巫师吗?页面 ID 真的是运行时中的资源名称(字符串)吗?
  • @Arhimed 是的,你是对的,它是一个可重用的活动类。虽然我不想透露目标。希望这不会限制您可以帮助我的程度!

标签: android dynamic android-activity


【解决方案1】:

您应该改用ViewFlipper 小部件。这是example

以这种方式管理内容视图及其子小部件更简洁。

无论如何,资源 ID 可以使用 Resources.getIdentifier 方法从名称中获取。

【讨论】:

  • 这太好了,谢谢你,正是我需要的。它还允许我非常轻松地在视图之间来回切换!
【解决方案2】:

是的。这是可能的。但有两个注意事项:

  1. ID 是 ints,而不是 Strings。
  2. 您需要妥善管理其中的视图。

【讨论】:

  • 我知道它们是int,但我不知道如何动态找出xml布局文件的int id。
  • @Neeta 我以为你想将ids 存储在一个列表中。
  • @Neeta 如果我明白你想要什么,你应该阅读这个:stackoverflow.com/questions/4427608/…
  • 谢谢你的链接真的很有帮助!我会尝试使用它来实现我想要的。
【解决方案3】:

在我创建的应用程序中,我使用以下代码将图像按钮设置为特定资源:

imgBtnCard.setImageResource(this.getResources()
    .getIdentifier("com.twp.cptshitface:drawable/" +
        cardType + cardDetails[1] , null, null));

我想说这就是你要找的东西:

int resLayoutId = this.getResources().
    getIdentifier("your.package.namespace:layout/" +
    pages.get(0), null, null);

setContentView(resLayoutId);
// where pages.get(0) returns a string such as "main2"

我已经在 onCreateMethod 中快速测试了这段代码。

如果您添加更多布局和/或资源,请记得清理您的项目,以便更新 id!

【讨论】:

    猜你喜欢
    • 2022-10-24
    • 2013-10-19
    • 2023-03-27
    • 2023-04-05
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多