0

より多くのアクティビティで何度も再利用できるメニューを含むレイアウトがあります... メニュー レイアウトは menu_up_row.xml と呼ばれ、レイアウトのすべてのボタンは menu_up_cell.xml と呼ばれます。そのため、すべてのアクティビティの menu_up_row.xml をプログラムで膨らませ、その間に menu_up_cell.xml もメニューにあるボタンの数だけ膨らませます。

この例外は、70 人のユーザーごとに約 1 回発生します。例外を発生させる MenuUp というクラスの静的メソッドの呼び出しを次に示します。

    public static void *etMenuUpButtonEnabled(Context ctx, LinearLayout menuUpLayout, int buttonID, boolean enabled) {
            LinearLayout btnLayout = (LinearLayout) menuUpLayout.findViewById(getResourceId(buttonID));
            //SOMETIMES NULL POINTER EXCEPTION HERE:
            ImageView menuCellImageView =(ImageView) btnLayout.findViewById(R.id.menuCellImageView); //<-- NULL POINTER EXCEPTION HERE
            ...

どこ :

  private static int getResourceId(int buttonID) {
    int retVal = 0;
    switch (buttonID){
    case BUTTON_MENU_UP_BTN1:
        retVal = R.id.menuCell1;
        break;
    case BUTTON_MENU_UP_BTN2:
        retVal = R.id.menuCell2;
        break;
    case BUTTON_MENU_UP_BTN3:
        retVal = R.id.menuCell3;
    }     

    return retVal;
}

上記のメソッドはMain Activity から呼び出されます。

...
LinearLayout menuUpLayout = (LinearLayout) findViewById(R.id.main_menu_up_row);
MenuUp.setMenuUpButtonEnabled(ctx, menuUpLayout, MenuUp.BUTTON_MENU_UP_BTN1,false);
...

メイン アクティビティの xml には、メニューを含めるための次のコードがあります。

<LinearLayout android:id="@+id/main_menu_up_row"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="50sp"
    android:visibility = "gone"
    >
</LinearLayout>

menu を膨らませるために、メイン アクティビティに次のコードがあります。

MenuUp.inflateMenuUpCustom(ctx, menuUpLayout);

どこ:

public static void inflateMenuUpCustom(Context ctx, LinearLayout menuUpLayout) {
    LayoutInflater layoutInflater = (LayoutInflater) 
            ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
    menuUpLayout.addView(layoutInflater.inflate(R.layout.menu_up_row, menuUpLayout, false) );

    //Aggiungo i bottoni del menu
    addMenuUpButton(ctx, menuUpLayout, R.id.menuCell1, R.drawable.menu_grid_order_by, R.string.menu_grid_order_by_str);
    addMenuUpButton(ctx, menuUpLayout, R.id.menuCell2, R.drawable.menu_grid_add, R.string.menu_grid_add_str);
    addMenuUpButton(ctx, menuUpLayout, R.id.menuCell3, R.drawable.menu_grid_filter_by, R.string.menu_grid_filter_by_str);

    }

と:

private static void addMenuUpButton(final Context ctx
                                  , LinearLayout menuUpLayout
                                  , int cellResourceId
                                  , int imageDrawableId
                                  , Integer stringResourceId) {
    LayoutInflater layoutInflater = (LayoutInflater) 
            ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
    LinearLayout btnLayout = (LinearLayout) menuUpLayout.findViewById(cellResourceId);
    btnLayout.addView(layoutInflater.inflate(R.layout.menu_up_cell, btnLayout, false) );
    ImageView menuCellImageView =(ImageView) btnLayout.findViewById(R.id.menuCellImageView);
    LinearLayout menuCellLinearLayout =  (LinearLayout) btnLayout.findViewById(R.id.menuCellLinearLayout);
    menuCellImageView.setImageDrawable(ctx.getResources().getDrawable(imageDrawableId));
    ...

ここにmenu_up_row.xml があります:

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


    <LinearLayout android:id="@+id/radRowToBeSeen"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >

        <LinearLayout android:id="@+id/linearLayoutDets4"
             android:orientation="horizontal" 
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:background="#e7e7e7"
         >

                <LinearLayout android:id="@+id/menuCellCont1"
                    android:layout_weight="0.2" 
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:orientation="horizontal" >
                    <LinearLayout android:id="@+id/menuCell1"
                        android:orientation="vertical"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>                        
                </LinearLayout>
                <LinearLayout android:id="@+id/menuCellCont2"
                    android:layout_weight="0.2" 
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:orientation="horizontal" >
                    <LinearLayout android:id="@+id/menuCell2"
                        android:orientation="vertical"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>                        
                </LinearLayout>
                <LinearLayout android:id="@+id/menuCellCont3"
                    android:layout_weight="0.2" 
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:orientation="horizontal" >
                    <LinearLayout android:id="@+id/menuCell3"
                        android:orientation="vertical"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>                        
                </LinearLayout>
            </LinearLayout>


    </LinearLayout>
</LinearLayout> 

ここにmenu_up_cell.xmlがあります

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/menuCellLinearLayout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="2dp"
    >

    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        >

        <ImageView
            android:id="@+id/menuCellImageView"
            android:layout_gravity="center_vertical"
            android:adjustViewBounds="true"
            android:scaleType="centerInside"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:padding="2dp"
            android:src="@drawable/menu_dummy" 
            android:visibility="gone"
            >
        </ImageView>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:orientation="horizontal"
            >

            <TextView
                android:id="@+id/menuCellTextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:maxLines="2"
                android:text="ciao"
                android:textColor="#ffffff"
                android:textSize="13sp" />

         </LinearLayout>

    </LinearLayout>
</LinearLayout>

何が間違っていますか?

4

0 に答える 0