hap*_*497 111 android android-layout
在我的布局xml文件中,我已经包含了其他布局xml文件(每个文件都有不同的android id).
<include layout="@layout/view_contact_name" android:id="+id/test1"/>
<include layout="@layout/view_contact_name" android:id="+id/test2"/>
Run Code Online (Sandbox Code Playgroud)
但是,当我在模拟器中运行它,并开始层次查看器,每个布局仍显示"NO_ID",并在我的代码,我
findViewById(R.id.test1)
和findViewById(R.id.test2)
两个返回null.
有人可以帮我解决我的问题吗?
Ron*_*ero 279
在中指定ID <include>
<include layout="@layout/test" android:id="@+id/test1" />
Run Code Online (Sandbox Code Playgroud)
然后使用两个findViewById
来访问布局中的字段
View test1View = findViewById(R.id.test1);
TextView test1TextView = (TextView) test1View.findViewById(R.id.text);
Run Code Online (Sandbox Code Playgroud)
使用该方法,您可以访问任何包含的任何字段.
小智 59
我发现,如果你<merge>
在include布局中使用tag,那么include的ID会转移到merge标签,而这不是真实的视图.
因此要么删除合并,要么用一些布局替换它.
Tor Norbye 写道:
该
<include>
标签是不是一个真正的观点,所以findByView不会找到它.@id属性(以及您在include标记上设置的任何其他属性)将应用于所包含布局的根标记.所以你的activity.getView(R.id.included1)实际上应该是<TextView>
它自己.
Dan*_*sky 34
Romain Guy 表示您可以通过android:id
在<include>
标记内放置属性来覆盖包含的布局的ID .
<include android:id="@+id/cell1" layout="@layout/workspace_screen" />
Run Code Online (Sandbox Code Playgroud)
And*_*ano 11
我认为最佳答案错过了最重要的一点,并可能误导人们认为<include/>
标签创建了一个包含包含内容的视图.
关键点是include的id被传递给include的布局文件的根视图.
这意味着:
// activity_main.xml
<include layout="@layout/somelayout" android:id="@+id/someid"/>
// somelayout.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Run Code Online (Sandbox Code Playgroud)
变成这样:
// activity_main.xml
<ImageView
android:id="@+id/someid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
68100 次 |
最近记录: |