より多くのアクティビティで何度も再利用できるメニューを含むレイアウトがあります... メニュー レイアウトは 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>
何が間違っていますか?