我尽最大努力开发一种聪明的方法来清除成堆的 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/