0

ボタンとその呼び出されたbutton/xmlを含む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が2回含まれています。

<?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ます。問題は、idを持つビューR.id.loginUser1が実際にはaButtonであり、ではないこと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");

また、IDがタグR.id.loginButton1によって上書きされたため、IDを持つボタンはもうありません。include

于 2013-02-17T05:00:55.530 に答える
0

あなたはこれをするべきです

最終ボタン最初=(ボタン)findViewById(R.id.loginButton1); first.setText( "your text");

loginUser1はボタンであり、LinearLayoutではないため。

于 2013-02-17T05:08:56.647 に答える