我有多个按层次结构顺序定义的布局,问题是当我尝试访问内部布局中定义的项目时,它给了我NullPointerException
。
这是我的布局结构。
R.layout.activity_map
-> <include layout="content_map">
-> <include layout="terrace_parent_map">
-> <include layout="terrace_collection_map">
现在terrace_collection_map
具有约束布局,我需要从活动中进行访问。
以下是布局。
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/constraintTerraceLayout"
>
</android.support.constraint.ConstraintLayout>
但是当我尝试获取constraintLayout
的ID时,它返回null。
constraintTerraceLayout= findViewById(R.id.constraintTerraceLayout);
**编辑-Terrace_collection_map **
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/constraintTerraceLayout"
>
<ImageView
android:id="@+id/imageView30"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:background="@drawable/terrace" />
</android.support.constraint.ConstraintLayout>
答案 0 :(得分:1)
尝试添加<merge /
>标记,当将一个布局包含在另一个布局中时,该标记可帮助您消除视图层次结构中的多余视图组。
例如,如果您的主布局是垂直的LinearLayout
,其中两个连续的视图可以在多个布局中重复使用,那么放置两个视图的可重复使用的layout
就需要它自己的根视图。
因此,如果<merge>
具有activity_map.xml
作为父标记,请使用LinearLayout
标记。然后像下面的代码一样更改terrace_collection_map.xml
父标记:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
//..........Your Custom Layout Design...........
</merge>
此链接可以帮助您https://developer.android.com/training/improving-layouts/reusing-layouts