4

ActionBar のアプリ内通知に関するこのチュートリアルに出くわしました。

http://www.jmhend.me/layerdrawable-menuitems

このログに記載されている行で item.getIcon() を呼び出すと、android.graphics.drawable.LayerDrawable 内の NullPointer だけが取得されます: http://pastebin.com/udKPtUzB

Android APIのバージョンに関係があるのではないかと思いますが、「null」を返すものがわからないため、解決策が見つかりません。

これは、アプリの起動時には発生しないことに注意してください。カウントを表示するためにドローアブルを更新しようとしたときにのみ発生します。

item.getIcon()これは、メニュー項目の Drawable を返す必要があるためであることがわかりました。ただし、実行時は常に null です。(起動はしませんが)

public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { 
    com.actionbarsherlock.view.MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.main, menu);
    menu.findItem(R.id.action_list).setIcon(
            new IconDrawable(this, IconValue.fa_list).colorRes(
                    android.R.color.black).actionBarSize()
    );
    com.actionbarsherlock.view.MenuItem item = menu.findItem(R.id.action_users);
    LayerDrawable icon;
    if (item.getIcon() != null) {
        icon = (LayerDrawable) item.getIcon();
        // Update LayerDrawable's BadgeDrawable
        setBadgeCount(MainActivity.this, icon, privateMsgNotificationCount);
    } else {
    }
    return true;
}

現在NPE if(item.getIcon()!=null)。上記の pastebin ログのように getIcon() が NPE を引き起こすため、この状態はテストされません。

注: 12 時間のテストの後、確実に言えることは、MenuItem の setIcon() を LayerDrawable として設定すると、getIcon() が null になるということだけです。setIcon() を他のタイプのドローアブルに設定すると、システムは MenuItem のドローアブルを記憶し、getIcon は null ではありません。私は困惑しています...

4

0 に答える 0