2015-09-17 81 views
-5

我想在操作欄內放置一個通知計數器,它給了我這個錯誤該onCreateOptionsMenu方法中:NullPointerException:試圖調用空虛對象引用虛擬方法'android.view.View android.widget.RelativeLayout.findViewById(int)'

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.widget.RelativeLayout.findViewById(int)' on a null object reference 
     at ro.oce.store.MainActivity.onCreateOptionsMenu(MainActivity.java:112) 
     at android.app.Activity.onCreatePanelMenu(Activity.java:2823) 
     at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:262) 
     at android.support.v7.internal.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85) 
     at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:241) 
     at android.support.v7.internal.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85) 
     at android.support.v7.internal.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:448) 
     at android.support.v7.internal.app.ToolbarActionBar$1.run(ToolbarActionBar.java:65) 
     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:5257) 
     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:903) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

下面是代碼:

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.shopping_cart).getActionView(); 
    TextView tv = (TextView) badgeLayout.findViewById(R.id.actionbar_notifcation_textview); 
    tv.setText("12"); 
    return true; 
} 

之前,我添加了最後3行代碼,我的應用程序沒有產生任何錯誤。有人能幫幫我嗎?

+0

有一件事你如何在menu.xml中使用'RelativeLayout' –

+0

這種方式將不會工作 – Gattsu

+0

@sourabhbans這是行不通的。它說不兼容的類型'必需:android.view.View''發現:無效' – Pikachuu

回答

0

兩個建議:

  • 拿走 「badgeLayout」 的ID找到時 - (TextView)findViewById();

  • 檢查佈局不爲空,錯誤 「空對象引用」,指調用實例爲null。所以在這種情況下,「badgeLayout」爲空。執行以下操作:

    - >檢查您所引用的佈局xml是否存在。

    - >刪除getActionView()

+0

我試過第二個建議,它給了我這個exeption ClassCastException:android.support.v7.internal.view.menu.MenuItemImpl不能轉換爲android.widget.RelativeLayout '。第一個建議給了我另一個exeption:'NullPointerException:嘗試在空對象引用上調用虛擬方法'void android.widget.TextView.setText(java.lang.CharSequence)' – Pikachuu

0

我會建議保持活動中的引用您在onCreateOptionsMenu收到菜單對象,然後使用檢索,需要變更爲MenuItem,當你需要它。例如,您可以按照以下方式做一些事情: 在您的menu.xml中製作一個actionbar_notifcation項目。 在您的活動中。

public class YourActivity extends Activity { 

     private Menu menu; 
     private String inBedMenuTitle = "Set to 'In bed'"; 
     private String outOfBedMenuTitle = "Set to 'Out of bed'"; 
     private boolean inBed = false; 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      super.onCreateOptionsMenu(menu); 

      // Create your menu... 
      this.menu = menu; 
      getMenuInflater().inflate(R.menu.options, menu); 
      return true; 
     } 

     private void updateMenuTitles() { 
      MenuItem bedMenuItem = menu.findItem(R.id.actionbar_notifcation); 

      bedMenuItem.setTitle("12"); 

     } 

    } 

或者,您也可以覆蓋onPrepareOptionsMenu每次顯示菜單時更新菜單項。

相關問題