首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android;BottomNavigationView = null

Android;BottomNavigationView = null
EN

Stack Overflow用户
提问于 2018-04-10 13:36:10
回答 4查看 6.6K关注 0票数 1

我不知道为什么BottomNavigationView为空。我使用Firebase,并添加了一些代码将数据添加到JSON文件中。在我这么做之后,我的一项活动就停止了。甚至不是我所从事的活动。我的导航等于null,我检查了XML文件。名称是相同的,调试也没有帮助,因为它向我展示了设置BottomNavigationView并给我一个NullPointer的一行代码。

这是正在创建此问题的导航:

代码语言:javascript
复制
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener

    = new BottomNavigationView.OnNavigationItemSelectedListener() 

  {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_to_dos:
                return true;
            case R.id.navigation_categories:
                intent = new Intent(ToDos.this, Categories.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                startActivity(intent);
                return true;
            case R.id.navigation_account:
                intent = new Intent(ToDos.this, Account.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                startActivity(intent);
                return true;
        }
        return false;
    }
};

这是我在onCreate()函数中初始化与Navigaion有关的所有内容的部分:

代码语言:javascript
复制
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
        navigation.setSelectedItemId(R.id.navigation_to_dos);

我知道这个错误:

代码语言:javascript
复制
E/AndroidRuntime: FATAL EXCEPTION: main
              Process: lb335.bbbaden.ch.pendenzenverwaltung, PID: 25288
              java.lang.RuntimeException: Unable to start activity ComponentInfo{lb335.bbbaden.ch.pendenzenverwaltung/lb335.bbbaden.ch.pendenzenverwaltung.ToDos}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.BottomNavigationView.setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView$OnNavigationItemSelectedListener)' on a null object reference
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3184)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3279)
                  at android.app.ActivityThread.-wrap12(Unknown Source:0)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1881)
                  at android.os.Handler.dispatchMessage(Handler.java:108)
                  at android.os.Looper.loop(Looper.java:166)
                  at android.app.ActivityThread.main(ActivityThread.java:7406)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926)
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.BottomNavigationView.setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView$OnNavigationItemSelectedListener)' on a null object reference
                  at lb335.bbbaden.ch.pendenzenverwaltung.ToDos.onCreate(ToDos.java:76)
                  at android.app.Activity.performCreate(Activity.java:7365)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3137)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3279) 
                  at android.app.ActivityThread.-wrap12(Unknown Source:0) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1881) 
                  at android.os.Handler.dispatchMessage(Handler.java:108) 
                  at android.os.Looper.loop(Looper.java:166) 
                  at android.app.ActivityThread.main(ActivityThread.java:7406) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926) 

我的活动XML:

代码语言:javascript
复制
<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:background="?android:attr/windowBackground"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/navigation" />

我在这个问题上迷失了方向,希望能得到更有经验的程序员的帮助。

编辑:

多亏了snachmsm,我才发现,我的函数顺序完全搞砸了。在实际设置内容之前,我执行了findViewById()。我不得不把它换掉,现在起作用了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-04-10 14:27:32

由: java.lang.NullPointerException:试图在空对象引用上调用虚拟方法'void 引起的

你的BottomNavigationViewnull,这是事实。这一行不是获取您的View

代码语言:javascript
复制
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);

您是否认为您的BottomNavigationView属于充气布局?R.id.navigation是否正确地设置为BottomNavigationView?显示来自onCreate方法的一些XML和更多代码。也许是不合适的秩序?(例如,findViewByIdsetContentView之前调用)

编辑:好的,id被正确地设置为XML内部的View,但是您只发布了其中的一小部分,还展示了如何在Activity中膨胀这个XML。

票数 1
EN

Stack Overflow用户

发布于 2018-04-10 13:53:16

您的导航返回false,因为您将其设置为false

请检查导航的末尾,并将返回类型从return false;更改为return true;

代码语言:javascript
复制
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener

= new BottomNavigationView.OnNavigationItemSelectedListener() 

 {

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.navigation_to_dos:
            return true;
        case R.id.navigation_categories:
            intent = new Intent(ToDos.this, Categories.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
            startActivity(intent);
            return true;
        case R.id.navigation_account:
            intent = new Intent(ToDos.this, Account.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
            startActivity(intent);
            return true;
    }
    return false; // Here is the problem. Change it from false to true
}};

还有,BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);

票数 0
EN

Stack Overflow用户

发布于 2020-05-08 08:22:23

在我的案例中,我也面临着这个问题,我通过替换正确的家庭活动来解决这个问题

代码语言:javascript
复制
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seller_home);//here was problem,i was  inflating wrong home activity
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49755094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档