Android 当我尝试显示Snackbar时,我的应用程序崩溃
我正在使用Android Studio的导航抽屉活动,我希望每次单击抽屉中的一个按钮时都会出现一个快捷键,但当我单击它时,应用程序就会崩溃。 以下是我单击其中一个导航按钮时运行的代码的简化版本:Android 当我尝试显示Snackbar时,我的应用程序崩溃,android,android-snackbar,Android,Android Snackbar,我正在使用Android Studio的导航抽屉活动,我希望每次单击抽屉中的一个按钮时都会出现一个快捷键,但当我单击它时,应用程序就会崩溃。 以下是我单击其中一个导航按钮时运行的代码的简化版本: @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { DrawerLayout drawer = (DrawerLayout)
@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_视图
(导航菜单视图本身)现在它工作得很好。但是,你介意简单地解释一下第一个参数是什么,以及为什么它很重要吗?我改变了