如何引用内部视图包括android中的布局

时间:2017-03-31 14:01:38

标签: android

您好我已编码以下内容以从包含布局获取视图。但我得到空指针异常。我哪里错了?

我的Java代码:

View actionbar = findViewById(R.id.actionbar);
                RelativeLayout actionRRl = (RelativeLayout)actionbar.findViewById(R.id.actionRR);
                actionRRl.setEnabled(false);
                actionRRl.setClickable(false);

在我的Activity.xml中,

   <include
            android:id="@+id/actionbar"
            layout="@layout/actionbar" />

包含的布局,即actionbar.xml

  <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/header"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:clickable="false"
        android:id="@+id/actionRR"
        android:orientation="vertical">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:clickable="false"
            android:padding="@dimen/logo_size"
            android:src="@drawable/logo" />

    </RelativeLayout>

错误堆栈:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setEnabled(boolean)' on a null object reference

3 个答案:

答案 0 :(得分:1)

为您所包含的布局提供ID,如下所示:

--git

覆盖您所包含布局中的父ID。

在您的情况下,将代码更改为此应解决问题:

<include android:id="@+id/actionbar" 

答案 1 :(得分:0)

一旦您将工具栏布局包含在您的活动中,它们的组件也属于您的活动,因此您可以直接实例化它们

RelativeLayout actionRRl = (RelativeLayout) findViewById(R.id.actionRR);
actionRRl.setEnabled(false);
actionRRl.setClickable(false);

答案 2 :(得分:0)

试试这个

RelativeLayout actionRRl = (RelativeLayout)findViewById(R.id.actionRR);
                actionbar.setEnabled(false);
                actionbar.setClickable(false);

你也可以通过夸大布局来获取视图并按照这样做,

View actionbar = LayoutInflater.from(this).inflate(R.layout.actionbar, null, false);
 RelativeLayout actionRRl = (RelativeLayout)actionbar.findViewById(R.id.actionRR);
                actionRRl.setEnabled(false);
                actionRRl.setClickable(false);