Android 当我尝试显示Snackbar时,我的应用程序崩溃

Android 当我尝试显示Snackbar时,我的应用程序崩溃,android,android-snackbar,Android,Android Snackbar,我正在使用Android Studio的导航抽屉活动,我希望每次单击抽屉中的一个按钮时都会出现一个快捷键,但当我单击它时,应用程序就会崩溃。 以下是我单击其中一个导航按钮时运行的代码的简化版本: @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { DrawerLayout drawer = (DrawerLayout)

我正在使用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();
    }
我认为问题在于我应该用其他东西替换
findviewbyd(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)
08-03 10:03:45.658 20870-20870/ca.davesautoservice.davesautoservice E/AndroidRuntime:致命异常:main
进程:ca.davesautoservice.davesautoservice,PID:20870
java.lang.NullPointerException
位于android.support.design.widget.Snackbar.(Snackbar.java:183)
位于android.support.design.widget.Snackbar.make(Snackbar.java:215)
位于ca.davesautoservice.davesautoservice.MainActivity.onNavigationItemSelected(MainActivity.java:106)
位于android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:151)
位于android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811)
在android.support.v7.view.menu.SubMenuBuilder.dispatchMenuItemSelected中(SubMenuBuilder.java:84)
在android.support.v7.view.menu.menuitemmpl.invoke(menuitemmpl.java:152)中
位于android.support.v7.view.menu.MenuBuilder.performitemation(MenuBuilder.java:958)
位于android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:318)
在android.view.view.performClick上(view.java:4463)
在android.view.view$PerformClick.run(view.java:18770)
位于android.os.Handler.handleCallback(Handler.java:808)
位于android.os.Handler.dispatchMessage(Handler.java:103)
位于android.os.Looper.loop(Looper.java:193)
位于android.app.ActivityThread.main(ActivityThread.java:5333)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:828)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
在dalvik.system.NativeStart.main(本机方法)

快餐店需要Cordinator布局视图或FloatingAction按钮视图才能正常运行和准确响应。 你在Snackbar的身体里传递了导航的身份证

怎么办

1-在协调器布局内包装布局分配ID并在Snackbar中使用该视图

2-通过FAB的findViewById(如果存在),然后它将适当地显示snackbar

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

希望能有所帮助。

快餐店需要Cordinator布局视图或浮动操作按钮视图才能正确操作和准确响应。 你在Snackbar的身体里传递了导航的身份证

怎么办

1-在协调器布局内包装布局分配ID并在Snackbar中使用该视图

2-通过FAB的findViewById(如果存在),然后它将适当地显示snackbar

Snackbar.make(findViewById(R.id.fab), "message", Snackbar.LENGTH_SHORT).show();
希望有帮助。

开尔文

阅读,您可以看到第一个参数是:

视图:从中查找父级的视图

所以,你应该传递你的任何观点。这样,快餐店就可以跟踪并找到父视图

您的活动中可能有其他视图

你通过了

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 a(而不是视图)。这样,
findViewById(R.id.nav\u playstore)
返回
NULL

将ID从
findViewById(R.ID.nav_playstore)
更改为当前活动中任何其他
视图的ID。它可以是
文本视图
编辑文本
等等。

开尔文

阅读,您可以看到第一个参数是:

视图:从中查找父级的视图

所以,你应该传递你的任何观点。这样,快餐店就可以跟踪并找到父视图

您的活动中可能有其他视图

你通过了

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 a(而不是视图)。这样,
findViewById(R.id.nav\u playstore)
返回
NULL

将ID从
findViewById(R.ID.nav_playstore)
更改为当前活动中任何其他
视图的ID。它可以是
文本视图
编辑文本

等等。

发布例外的堆栈跟踪您应该传递一个视图(而不是菜单)。。。因此,将findViewById(R.id.nav_playstore)替换为您拥有的任何其他视图(例如:findViewById(R.id.my_text_视图)执行
findViewById(…)
内的
onCreate()
。然后在任何地方使用您的视图。此外,
Snackbar.make(…)的第一个参数
应该是Snackbar
消息的容器视图,而不是其他任何内容。您正在将导航布局传递给Snackbar,它将在单击后靠近。传递要在其上显示您的Snackbar的活动视图。若要阅读,请显示例外项的堆栈跟踪。您应该传递视图(而不是菜单)…因此,将findViewById(R.id.nav_playstore)替换为您拥有的任何其他视图(例如:findViewById(R.id.my_text_视图)执行
findViewById(…)
内的
onCreate()
。然后,在任何地方使用您的视图。此外,
Snackbar.make(…)的第一个参数
应该是
Snackbar
消息的容器视图,而不是其他任何内容。您正在将导航布局传递给Snackbar,它将在单击后靠近。传递要在其中显示您的Snackbar的活动视图要阅读请将其更改为
R.id.nav_视图
(导航菜单视图本身)现在它工作得很好。但是,你介意简单地解释一下第一个参数是什么,以及为什么它很重要吗?我改变了