【发布时间】:2017-06-19 07:24:34
【问题描述】:
我正在尝试使用包含标记将一个布局 (xyz.xml) 合并到另一个布局 (main.xml) 中。我想在单击 main.xml 中的按钮时隐藏/显示布局 xyz.xml。因此,为此我将 id 提供给包含的视图。但是当我在java文件中访问它时,它会抛出空指针异常。 以下是我的 xyz.xml 文件代码:-
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<TextView
android:id="@+id/tv_candidateName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/icon_candidate_name"
android:drawablePadding="8dp"
android:drawableStart="@drawable/icon_candidate_name"
android:padding="8dp"
android:text="Raju jain"
android:textColor="@android:color/black"
android:textSize="15sp" />
<TextView
android:id="@+id/tv_candidateEmail"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:drawableLeft="@drawable/icon_mail"
android:drawablePadding="8dp"
android:drawableStart="@drawable/icon_mail"
android:paddingBottom="8dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="xyz@gmail.com"
android:textColor="#a9a9a9"
android:textSize="13sp" />
</merge>
我在 main.xml 文件中使用上述布局,如下所示:-
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#f7f7f7"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/tv_candidateInfoLbl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/blue"
android:drawableEnd="@drawable/icon_check"
android:drawableRight="@drawable/icon_check"
android:padding="8dp"
android:text="Candidate Information"
android:textColor="@android:color/white"
android:textSize="15sp" />
<include
android:id="@+id/view_candidateInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/include_interview_candidate_info" />
</LinearLayout>
</ScrollView>
在 MainActivity.java 文件中,当我尝试查找包含标记的 Id 时,我收到空指针异常。
View view_candidateInfo= (View)findViewById(R.id.view_candidateInfo);
view_candidateInfo.setVisibility(View.GONE);
【问题讨论】:
-
一个常见的错误是您正在使用的设备有特定的布局(基于某些资源,如屏幕尺寸或方向)。但我不确定
include是否仍然存在,您可能需要将其放入组件中以隐藏它 -
这里没有使用合并布局。你可以使用
LinearLayout -
在这个answer 你可以看到这不适用于
merge -
@arjun_sna 我知道使用 LinearLayout 也可以达到同样的效果,并且可以正常工作。但我想知道上面的代码sn-p有什么问题
-
膨胀后没有
ViewIDview_candidateInfo。<merge>标签导致那些Views 被直接添加到<include>的父代。如果xyz布局有一个实际的根View,那么<include>ID 将覆盖根View的ID,但这里不是这种情况。xyz没有根View。
标签: java android xml nullpointerexception