我正在尝试使用include标记将一个布局(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);
答案 0 :(得分:2)
在android doc解释中有一个有趣的解释,merge
是为了防止重新加密LinearLayout
,因此包含会替换include
标记。
来自Use the <merge> Tag
现在,当您将此布局包含在另一个布局中时(使用标记),系统会忽略该元素并将两个按钮直接放在布局中,而不是标记。
因此,您的标记include
在视图中不存在,它将被包含的布局的组件(没有合并标记)替换。
您可以将其添加到具有ID的View
或删除merge
答案 1 :(得分:0)
无需使用合并标记。 只需对 xyz.xml
使用线性布局<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<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" /> </LinaerLayout>
然后将此布局包含在 main.xml 中;
<include
android:id="@+id/layout_xyz"
layout="@layout/xyz"
android:visibility="visible"/>
您可以以编程方式将此布局设置为可见/不可见。
LinearLayout xyzLayout = (LinearLayout) findViewByid(R.id.layout_xyz);
xyzLayout.setVisibility(View.VISIBLE);