4

I am trying to create a badge like view in the Action bar. (Using the latest support library).

I am trying the following way. But its saying null pointer exception.

    public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_dashboard_menu, menu);

    MenuItem textBadge = menu.findItem(R.id.badge);
    RelativeLayout badgeLayout = (RelativeLayout) MenuItemCompat.getActionView(textBadge);
    TextView tv = (TextView) badgeLayout.findViewById(R.id.actionbar_notifcation_textview);
    tv.setText("12");

    return super.onCreateOptionsMenu(menu);

}

Menu.xml is

    <item
    android:id="@+id/badge"
    android:actionLayout="@layout/actionbar_badge_layout"
    android:icon="@drawable/btn_star_off_disabled_holo_light"
    android:showAsAction="always|withText">
</item> 

and the Layout.xml is

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="48dp"
android:layout_height="fill_parent"
android:layout_gravity="right" >

<!-- Menu Item Image -->
<ImageView
    android:layout_width="48dp"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:src="@drawable/btn_star_off_disabled_holo_light" />

<!-- Badge Count -->    
<TextView
    android:id="@+id/actionbar_notifcation_textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:padding="5dp"
    android:text="99"
    android:textColor="#ffffff" />

</RelativeLayout>

And here is my Log:

01-22 09:12:45.439: E/AndroidRuntime(4819): FATAL EXCEPTION: main
01-22 09:12:45.439: E/AndroidRuntime(4819): java.lang.NullPointerException
01-22 09:12:45.439: E/AndroidRuntime(4819):     at    com.activities.DashboardActivity.onCreateOptionsMenu(DashboardActivity.java:617)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at    android.app.Activity.onCreatePanelMenu(Activity.java:2158)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:232)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:70)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at android.os.Handler.handleCallback(Handler.java:587)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at android.os.Looper.loop(Looper.java:130)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at android.app.ActivityThread.main(ActivityThread.java:3687)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at java.lang.reflect.Method.invokeNative(Native Method)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at java.lang.reflect.Method.invoke(Method.java:507)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-22 09:12:45.439: E/AndroidRuntime(4819):     at dalvik.system.NativeStart.main(Native Method)
dhiku
  • 1,818
  • 2
  • 22
  • 38
  • 1
    Which line in the line 617 in your code? – sergej shafarenka Jan 27 '14 at 16:55
  • TextView tv = (TextView) badgeLayout.findViewById(R.id.actionbar_notifcation_textview); this is 617. Thanks – dhiku Jan 27 '14 at 17:03
  • MenuItemCompat.getActionView() returns null. Checkout this post: http://stackoverflow.com/questions/18438890/menuitemcompat-getactionview-always-returns-null – sergej shafarenka Jan 27 '14 at 17:06
  • When i run using breakpoint .. i am getting null at RelativeLayout badgeLayout. So i am confused. Is it because of MenuInflater inflater = getMenuInflater(); Thank you – dhiku Jan 27 '14 at 17:12

1 Answers1

14

Thank you beworker for your help.

For all those who are looking for answer.

Its in the Menu XML thats causing the Null Pointer Exception. Changed android:actionLayout to app:actionLayout.

Earlier:

 <item
android:id="@+id/badge"
android:actionLayout="@layout/actionbar_badge_layout"
android:icon="@drawable/btn_star_off_disabled_holo_light"
android:showAsAction="always|withText">

Changed to:

 <item
android:id="@+id/badge"
yourapp:actionLayout="@layout/actionbar_badge_layout"
android:icon="@drawable/btn_star_off_disabled_holo_light"
yourapp:showAsAction="always|withText">

dhiku
  • 1,818
  • 2
  • 22
  • 38
  • Hi @dhiku, i have very annoying problem. i am having common menu in activity but i activity has different menu so i am using setHasOptionsMenu(true); and implemented onCreateOptionsMenu. but if i use android:actionLayout it crashes and when u use yourapp:actionLayout it just shows 3 dot overflow menu rather showing edittext from my custom layout. can you please help? – djk Dec 23 '14 at 08:56