【问题标题】:Is it possible to programmatically include specific layout with Kotlin Android Extension?是否可以通过 Kotlin Android Extension 以编程方式包含特定布局?
【发布时间】:2019-01-23 09:25:54
【问题描述】:

假设我的HomeActivity 有两个布局 activity_home_1activity_home_2。 我希望能够像以前在 Java 中那样在它们之间切换:

int layout = getResources().getIdentifier("activity_home_" + getHomeScreenNumber(),"layout",getPackageName());
setContentView(layout);

后来使用findViewById();引用我的布局元素

当然,这两个布局中的所有元素都命名相同,只是外观不同,所以这在 Java 中完美运行。


在 Kotlin 的另一边,我避免使用 findViewById(),我正在使用 Kotlin Android 扩展,并且包含这样的布局非常有用:

import kotlinx.android.synthetic.main.activity_home_1.*

问题是当我想在它们之间切换时。只是简单地为另一个布局添加另一个导入它会导致错误,因为它不知道要查看哪个布局(因为它们都有相同的字段)。

使用 Kotlin Android 扩展时如何在两种布局之间切换?

【问题讨论】:

  • 在这种情况下您应该考虑使用片段。无论如何,您将无法在 Activity 中实现这一点。如果所有视图的类型都相同,您甚至不需要。合成属性不会验证您的布局。您还必须考虑使用合成属性缓存视图。所以你必须禁用缓存或确保缓存被清除。

标签: android android-layout kotlin kotlin-android-extensions


【解决方案1】:

答案很简单,我没有引起足够的重视。 它是包含所需的布局:

setContentView(..)

例如,如果您包含

  • import kotlinx.android.synthetic.main.activity_home_1.*

并在您的OnCreate() 中设置

  • setContentView(R.layout.activity_home_3)

现在,您的 activity_home_3 布局将显示出来,并且它们的元素将被引用!

不需要 findViewById()

【讨论】:

    猜你喜欢
    • 2020-01-22
    • 2011-03-12
    • 2013-09-30
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2018-10-22
    • 1970-01-01
    相关资源
    最近更新 更多