2015-04-17 22 views
2

我在佈局actionbar_badge_layout.xml文件:顯示java.lang.NullPointerException同時加入的動作條圖標文本

<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="@mipmap/icon_back" /> 

<!-- Badge Count --> 
<TextView 
    android:id="@+id/actionbar_notifcation_textview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:text="99" 
    android:textColor="@color/primary_dark_material_light" /> 

裏面res/menu_comment xml我:

<item 
    android:id="@+id/action_add" 
    android:icon="@mipmap/ic_menu_add" 
    android:actionLayout="@layout/actionbar_badge_layout" 
    android:title="Add" 
    app:showAsAction="always"> 
</item> 

然後我的活動我內心有onCreateOptionsMenu()爲:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_comment, menu); 

    RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.action_add).getActionView(); 
    TextView t = (TextView)badgeLayout.findViewById(R.id.actionbar_notifcation_textview); //here I am getting null pointer exception 

    t.setText("12"); 


    return true; 

} 

但是我得到空指針異常。 Logcat給我輸出爲:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.widget.RelativeLayout.findViewById(int)' on a null object reference 
     at com.mypackage.activities.ShowCommentsActivity.onCreateOptionsMenu(ShowCommentsActivity.java:77) 
     at android.app.Activity.onCreatePanelMenu(Activity.java:2820) 
     at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:275) 
     at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276) 
     at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79) 
     at android.support.v7.widget.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:49) 
     at android.support.v7.internal.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:459) 
     at android.support.v7.internal.app.ToolbarActionBar$1.run(ToolbarActionBar.java:69) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5221) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

這段代碼有什麼問題。任何建議將不勝感激。謝謝advace

回答

4

你在哪裏關閉RelativeLayout

<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="@mipmap/icon_back" /> 

<!-- Badge Count --> 
<TextView 
    android:id="@+id/actionbar_notifcation_textview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:text="99" 
    android:textColor="@color/primary_dark_material_light" /> 

XML文件的末尾添加</RelativeLayout>

此外,嘗試改變你的

<item 
    android:id="@+id/action_add" 
    android:icon="@mipmap/ic_menu_add" 
    android:actionLayout="@layout/actionbar_badge_layout" 
    android:title="Add" 
    app:showAsAction="always"> 
</item> 

到,

<item 
    android:id="@+id/action_add" 
    android:icon="@mipmap/ic_menu_add" 
    app:actionLayout="@layout/actionbar_badge_layout" 
    android:title="Add" 
    app:showAsAction="always"> 
</item> 
+1

同時發佈的問題:) –

+0

@Yuva拉吉是通常被省略chainging應用後:actionLayout = 「@佈局/ actionbar_badge_layout」 它完美的作品。謝謝 – PPD

1

嘗試下面函數調用從onCreate()

private void setActiobarTitle(String title) 
{ 
    View v = getActionbar().getCustomView(); 
    TextView t = (TextView) v.findViewById(R.id.actionbar_notifcation_textview); 
    t.setText("12"); 
} 

注:還設置actionBar.setDisplayShowCustomEnabled(true);使在操作欄自定義佈局。

相關問題