安卓:setContentView() == getViewInflate().inflate()?

标签 android layout-inflater

我尽最大努力开发一种聪明的方法来清除成堆的 Blah blah = (Blah) this.findViewById(R.id.blah) 否则会污染字段和 onCreate()我的小 Activity 的方法,为此,我觉得我不应该对 XML 中定义的每个 View 使用 setContentView(),而应该使用 getViewInflate().inflate()。

Activity.setContentView() 是一种语法糖吗?它实际上是在为 XML 上的每个 View 重复 getViewInflate().inflate() 吗?我读过一些东西,好像它们是一样的。

如果我可以通过查看代码得到答案,请告诉我。我检查了 Activity.class,但只找到评论。

最佳答案

Activity 上的 setContentView 实际上调用了 Activity 使用的 Window 上的 setContentView,它本身所做的不仅仅是扩充布局。

您可以做的是使用反射将 View 映射到类字段。可以下载实用类on Github这样做。

它将解析布局中声明的所有 View ,然后尝试在您的 R.id 类中找到与 id 对应的名称。然后它会尝试在目标对象中找到一个同名的字段,并用相应的 View 设置它。

例如,如果你有这样的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
</LinearLayout>

它会自动将其映射到您 Activity 中的 textView1 字段。

关于安卓:setContentView() == getViewInflate().inflate()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11429865/

相关文章:

java - 单击事件后从资源布局中 inflatedView

android:<include> 标签导致错误

c# - SQLite Net PCL 慢 SELECT 查询

android - 如何更改像素数以支持不同的屏幕密度

java - Firebase 连接不可用 Android Studio 3.2

android - 尝试将 View 动态添加到线性布局android时获取java.lang.RuntimeException

android - 如何从 android 中膨胀的多个 LinerLayouts 中获取 Editexts 的值?

android - Android 上的库构建错误

java - 检查 fragment 当前是否可见

android - 为什么 Fragment 的 ScrollView 中的 LinearLayout 是 NULL 对象?