2

非常に奇妙な例外があります!。最初に相対レイアウトを参照し、次にその可視性状態を取得しようとしますが、アクティビティがクラッシュし、getVisibilty()でNullPointerExceptionがスローされます。理由がわかりません!、問題を理解するために多くの時間を費やしましたが、できませんでした!、これが私のアクティビティコードです:

    setContentView(R.layout.main3d_activity);
    RelativeLayout optionLayout;
    optionLayout = (RelativeLayout) findViewById(R.id.main_optionLayout);
    int vis= optionLayout.getVisibility();

main3d_activityコード:

    <?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <include
        android:id="@+id/include_headerbar"
        android:layout_width="fill_parent"
        android:layout_height="60dp"
        layout="@layout/headerbar_layout" />
    <include
        android:id="@+id/include_footerbar"
        android:layout_width="fill_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        layout="@layout/footerbar_layout" />

    <ViewFlipper
        android:id="@+id/vf"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/include_footerbar"
        android:layout_below="@+id/include_headerbar" >

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/container_mainlayout" />

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/living_layout" />

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/bedroom_layout" />

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/childrenbedroom_layout" />

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/kitchen_layout" />

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/dinningroom_layout" />

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/corridor_layout" />

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/roof_layout" />

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/garden_layout" />

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/garage_layout" />

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            layout="@layout/container_mainlayout" />
    </ViewFlipper>

    <include
        android:layout_width="300dp"
        android:layout_height="match_parent"
        android:layout_above="@+id/include_footerbar"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/include_headerbar"
        layout="@layout/slidingdrawer_infolayout" />

    <include
        android:layout_width="300dp"
        android:layout_height="400dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        layout="@layout/slidingdrawer_roomslistlayout" />

    <include
        android:layout_width="350dp"
        android:layout_height="300dp"
        android:layout_above="@+id/include_footerbar"
        android:layout_alignParentRight="true"
        layout="@layout/logger_layout" />

    <include
        android:id="@+id/include_relativeMenu"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/include_headerbar"
        layout="@layout/options_menulayout" />

</RelativeLayout>

options_menuLayout xmlコード:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_optionLayout"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/main_headerbackground"
android:orientation="vertical"
android:visibility="invisible" >

<Button
    android:id="@+id/relativeMenuAllSensorsButton"
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:layout_alignParentTop="true"
    android:background="@drawable/main_headerbackground"
    android:gravity="center_vertical|center_horizontal"
    android:text="Activation List"
    android:textColor="@android:color/white"
    android:textSize="18sp" />

<Button
    android:id="@+id/relativeMenuUsersButton"
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:layout_below="@+id/relativeMenuAllSensorsButton"
    android:background="@drawable/main_headerbackground"
    android:gravity="center_vertical|center_horizontal"
    android:text="Users"
    android:textColor="@android:color/white"
    android:textSize="18sp" />

<Button
    android:id="@+id/relativeMenuPreferencesButton"
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:layout_below="@+id/relativeMenuUsersButton"
    android:background="@drawable/main_headerbackground"
    android:gravity="center_vertical|center_horizontal"
    android:text="Settings"
    android:textColor="@android:color/white"
    android:textSize="18sp" />

プロジェクトをクリーンアップし、ワークスペースを再構築し、別のエミュレーターを使用してみましたが、同じ問題が解決しません。

4

3 に答える 3

8

あなたmain3d_activity.xmlが持っている:

<include
    android:id="@+id/include_relativeMenu"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
     android:layout_below="@+id/include_headerbar"
    layout="@layout/options_menulayout" />

そして、options_menulayout.xmlあなたには次のものがあります:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_optionLayout"

したがって、IDを含めるときにIDをオーバーライドしているようです。削除する

    android:id="@+id/include_relativeMenu"

インクルードから、または他の ID ではなくその ID を検索します。

于 2012-06-04T23:46:53.087 に答える
3

etContentView で設定したものとは別の .xml ファイルにあるビューを呼び出している場合、 残念ながら、findViewById()によって返される null 値を取得します。それはあなたの場合です:

R.id.main_optionLayoutを含まないmain3d_activity.xml

LayoutInflator を使用する必要があります

<include
    android:id="@+id/include_relativeMenu"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/include_headerbar"
    layout="@layout/options_menulayout" />

編集:

include タグを使用して options_menulayout を呼び出していることに気付きましたが、

android:id="@+id/include_relativeMenu" 

*options_menulayout* の ID を *include_relativeMenu* にオーバーライドしました

次の 2 つの選択肢があります。

1) 含まれているレイアウトに割り当てられた新しい ID を削除します

android:id="@+id/include_relativeMenu"

あなたのxmlは次のようになります。

<include
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/include_headerbar"
    layout="@layout/options_menulayout" />

2) を呼び出して、新しく割り当てられた ID への参照を取得します。

optionLayout = (RelativeLayout) findViewById(R.id.include_relativeMenu);

于 2012-06-04T23:45:15.863 に答える
0

ContentView を main3d_activity に設定します。R.id.main_optionLayoutこれには、次のメソッドでその可視性にアクセスしようとするまで問題ではないものが含まれていません。そのビュー (main_optionLayout) は決して膨張しないため、null です。

編集 ~ main3d_activity レイアウトに次のコードが表示されます。

<include
    android:id="@+id/include_relativeMenu"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/include_headerbar"
    layout="@layout/options_menulayout" />

正直なところ、XML にインクルードすることが問題かどうかを判断できるほど、私は十分に精通していませんが、アクセスしようとしている相対的なレイアウトが直接膨張することはないため、nullpointer が発生することは想像できます。

于 2012-06-04T23:39:47.973 に答える