0

我有一个 xml 文件,其中包含一个按钮及其称为button/xml

<Button
    android:id="@+id/loginButton1"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:background="@drawable/button_background"
    android:text="Button" />

我有另一个名为login.xml的布局,其中包含两次 button.xml。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:paddingLeft="30dp"
    android:paddingRight="30dp"
    android:paddingTop="30dp">

    <include
        android:id="@+id/loginUser1"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        layout="@layout/button" />

        <include
            android:id="@+id/loginUser2"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_marginTop="20dp"
            layout="@layout/button" />

</LinearLayout>

现在,当我尝试在我的 Java 类中分别访问每个按钮时,在指向loginUser1时出现错误。错误说NullPointerException。既然我确定 loginUser1 存在,为什么我仍然收到错误消息?

    final LinearLayout layout = (LinearLayout)findViewById(R.id.loginUser1); //null pointer exception HERE!
    final Button button = (Button)layout.findViewById(R.id.loginButton1);
    button.setText("button one");
4

2 回答 2

4

看看你的日志猫。你应该得到ClassCastException而不是NullPointerException. 问题是带有 idR.id.loginUser1的视图实际上是 aButton而不是 a LinearLayout。以下代码应该可以正常工作:

final Button first = (Button) findViewById(R.id.loginUser1);
final Button second = (Button) findViewById(R.id.loginUser2);

first.setText("button one");
second.setText("button two");

另外,请注意,R.id.loginButton1不再有带有 id 的按钮,因为它的 id 已被include标签覆盖

于 2013-02-17T05:00:55.530 回答
0

你应该做这个

final Button first = (Button) findViewById(R.id.loginButton1); first.setText("你的文字");

因为 loginUser1 是一个按钮,而不是一个 LinearLayout。

于 2013-02-17T05:08:56.647 回答