2016-08-03 74 views
0

我正在使用Android Studio的導航抽屜活動,並且我想要一個小吃店出現,只要我點擊抽屜中的一個按鈕,但是當我點擊它時,應用崩潰。 下面是代碼運行的一個簡化版本,當我點擊導航按鈕之一:當我嘗試顯示小吃店時,我的應用崩潰了

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    int id = item.getItemId(); 
    if (id == R.id.nav_playstore) { 
     Snackbar.make(findViewById(R.id.nav_playstore), "This app is not available on the Play Store yet", Snackbar.LENGTH_LONG).show(); 
    } 

我認爲這個問題是我應該取代findViewById(R.id.nav_playstore)別的東西,但我不知道我會放在那裏。如果你需要更多的信息,我可以給你一些。謝謝:)

編輯:這裏的堆棧跟蹤:

08-03 10:03:45.658 20870-20870/ca.davesautoservice.davesautoservice E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: ca.davesautoservice.davesautoservice, PID: 20870 
    java.lang.NullPointerException 
     at android.support.design.widget.Snackbar.<init>(Snackbar.java:183) 
     at android.support.design.widget.Snackbar.make(Snackbar.java:215) 
     at ca.davesautoservice.davesautoservice.MainActivity.onNavigationItemSelected(MainActivity.java:106) 
     at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:151) 
     at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811) 
     at android.support.v7.view.menu.SubMenuBuilder.dispatchMenuItemSelected(SubMenuBuilder.java:84) 
     at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
     at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958) 
     at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:318) 
     at android.view.View.performClick(View.java:4463) 
     at android.view.View$PerformClick.run(View.java:18770) 
     at android.os.Handler.handleCallback(Handler.java:808) 
     at android.os.Handler.dispatchMessage(Handler.java:103) 
     at android.os.Looper.loop(Looper.java:193) 
     at android.app.ActivityThread.main(ActivityThread.java:5333) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644) 
     at dalvik.system.NativeStart.main(Native Method) 
+1

任何其他張貼異常 – Blackbelt

+0

你應該通過一個視圖(而不是一個菜單)...所以,更換堆棧跟蹤findViewById(R.id.nav_playstore) (例如:findViewById(R.id.my_text_view) – W0rmH0le

+0

在'onCreate()'內執行'findViewById(...)'的東西,然後在你想要的地方使用你的視圖,此外,還有第一個參數'Snackbar。 make(...)'應該是「Snackbar」消息的容器視圖,而不是其他任何東西。 –

回答

1

開爾文。

DOCS,你可以看到,第一個參數是:

觀點:爲了找到父母。

所以,你應該通過你有任何看法。這樣,小吃店可以跟蹤並找到父級視圖。

您可能在您的活動中有任何其他視圖。

你傳入

Snackbar.make(findViewById(R.id.nav_playstore), "This app is not available on the Play Store yet", Snackbar.LENGTH_LONG).show(); 

然而R.id.nav_playstore是ID的菜單項(而不是一個視圖)。這樣,findViewById(R.id.nav_playstore)返回NULL

將ID從findViewById(R.id.nav_playstore)更改爲您在當前活動中擁有的任何其他View的ID。它可以是一個TextViewEditText 等等

+0

我將它改爲'R.id.nav_view'(導航菜單視圖本身),現在它工作正常。但是,你是否輕易地解釋了第一個參數是什麼,以及它爲什麼重要? –

1

小吃店需要要麼Cordinator佈局的觀點或FloatingAction按鈕的正常運行,並且準確地響應視圖。 你在Snackbar的身體中傳入了nav的id。

怎麼辦協調佈局內

1-裹布局爲它分配一個ID,並使用在小吃吧這一觀點。通過FAB的findViewById(如果存在),它將適當地顯示快餐欄。

Snackbar.make(findViewById(R.id.fab), "message", Snackbar.LENGTH_SHORT).show(); 

希望它有幫助。

相關問題