当前位置: 首页 > 知识库问答 >
问题:

底部导航与片段FATAL EXCEPTION sdk

束志业
2023-03-14

我试图设置一个显示3个片段的底部导航。

问题是,该应用程序完全适用于Android 5.0,但在Android 6.0及更高版本上抛出错误...

SdkVersion 26-minSdkVersion 21-塔吉特SdkVersion 26-

可以肯定的是,我一直在使用这个例子来构建这个应用程序,在我的代码中实现了这个方法之后,仍然会抛出一个异常。

提前感谢您的帮助。

错误:

    AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.samsung.auto_temperatura, PID: 8129
              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.samsung.auto_temperatura/com.example.samsung.auto_temperatura.MainActivity}: 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




     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

主要活动

   public class MainActivity extends AppCompatActivity {

public static final String FRAGMENT_USTAWIENIA = "FRAGMENT_USTAWIENIA";
public static final String FRAGMENT_CZUJNIKI = "FRAGMENT_CZUJNIKI";
public static final String FRAGMENT_ROZLACZ = "FRAGMENT_ROZLACZ";

private static final String TAG = MainActivity.class.getSimpleName();


    // I think here goes something wrong...
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_ustawienia:
                replaceFragment(UstawieniaFragment.newInstance(),FRAGMENT_USTAWIENIA);
                return true;
            case R.id.action_czujniki:
                replaceFragment(CzujnikiFragment.newInstance(),FRAGMENT_CZUJNIKI);
                return true;
            case R.id.action_rozlacz:
                replaceFragment(RozlaczFragment.newInstance(),FRAGMENT_ROZLACZ);
                return true;
        }
        return false;
    }

};


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    BottomNavigationView navigation = findViewById(R.id.bottom_navigation);
    navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_ustawienia:
                    replaceFragment(UstawieniaFragment.newInstance(),FRAGMENT_USTAWIENIA);
                    return true;
                case R.id.action_czujniki:
                    replaceFragment(CzujnikiFragment.newInstance(),FRAGMENT_CZUJNIKI);
                    return true;
                case R.id.action_rozlacz:
                    replaceFragment(RozlaczFragment.newInstance(),FRAGMENT_ROZLACZ);
                    return true;
            }
            return false;
        }
    });

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.add(R.id.fragment_container, CzujnikiFragment.newInstance(), FRAGMENT_CZUJNIKI)
            .commit();

}

private void replaceFragment(Fragment newFragment, String tag) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, newFragment, tag)
            .commit();

}
}

主要活动XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.example.samsung.auto_temperatura.MainActivity">
<android.support.design.widget.AppBarLayout
    android:id="@+id/appBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar">
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:contentInsetLeft="0dp"
        android:elevation="4dp"
        android:fitsSystemWindows="true"
        android:minHeight="?attr/actionBarSize"
        android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:titleTextColor="@color/bialy"
        app:contentInsetRight="0dp">
        <ImageView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:src="@drawable/imkapknapis"
            android:layout_marginRight="12dp"/>
        <TextView
            android:id="@+id/toolbar_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginRight="4dp"
            android:text="STAN CZUJNIKÓW:"
            android:visibility="visible"
            android:textStyle="bold"/>

        <TextView
            android:id="@+id/stan"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="DOBRY"
            android:textStyle="bold"/>
    </android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/bottom_navigation" />
<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:layout_gravity="bottom"
    app:itemBackground="@color/bialy"
    app:itemIconTint="@color/imkNiebieski"
    app:itemTextColor="@color/czarny"
    app:menu="@menu/nav_items"
    />

片段示例XML:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerviewID"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentStart="true"
    android:layout_marginTop="24dp"
    android:clickable="true"
    android:clipChildren="false"
    android:clipToPadding="false" />

共有1个答案

诸新霁
2023-03-14
BottomNavigationView navigation = findViewById(R.id.bottom_navigation);

findViewById在代码中返回null。你能附上活动和片段的布局XML文件吗?。确保您拥有布局id为R.id.bottom_navigation的视图。

 类似资料:
  • 我的主要活动中有一个底部导航栏。通过单击底部导航中的一个选项卡,我想更改视图中的片段。我有以下代码:主要活动: } 我的一个片段: 如果我单击其中一个选项卡,就会显示正确的片段,因此这是可行的。然而,当新片段出现时,我想单击另一个选项卡来显示另一个片段,这就行不通了。底部导航栏不会对单击做出反应。甚至日志。i语句不起作用,因此似乎没有调用导航项SelectedListener。 我对android

  • 我创建了一个带有底部导航栏的活动。我在谷歌上搜索了很多关于它的信息,但现在我不知道如何准确地处理这个问题。之前,当用户点击底部导航时,我刚刚开始了另一个活动,但我认为这不好。 如何在选项卡之间切换?我必须处理碎片吗?那么“setContentView(int layoutResID)”呢?我该怎么做?我很困惑。。。 非常感谢你的帮助——我希望你明白我的意思。

  • 我是Android开发新手,所以我不明白很多,也许是基本的东西,也许甚至陈述的主题也没有完全反映我的问题,我事先道歉,我不能更准确地表述。请帮我回答一些问题。 我的应用程序中有一个底部导航,有三个菜单项。就像图片上一样: 底部导航 最初,我是按照标准的Android Studio示例来做的: 在这段代码中,菜单项切换片段,保存每个片段的状态(我不知道具体如何,它似乎在导航控制器内部的某个地方)。

  • 我有底部的导航栏,点击导航栏中的项目,我正在替换片段。我有3个片段A、B、C,所以点击B项B片段被加载,在B中我调用3-4个API。所以现在如果我转到C,然后再次转到B,将创建一个新的B片段实例,并再次调用这些API,那么如何保存片段实例状态,并且在更改片段时不再调用API。这是我的密码。 我已经在MainActivity的onCreate中初始化了上面的片段成员变量

  • 我创建了一个带有“底部导航活动”的新项目: 这是生成的代码: 如何使用底部栏更改为新片段?例如,我有3个片段:Fragment1 Fragment2和Fragment3,我想用底部栏中的3个按钮更改为它们。我还想通过左右滑动手指来切换片段,我该怎么做?

  • 实现tabbar建议采用小程序原生的tabbar,通过设置page/main.js(即对应小程序中app.json)来实现,详情请看小程序文档。示例如下,仅作参考: tabBar: { color: '#999999', selectedColor: '#1AAD16', backgroundColor: '#ffffff', borderStyle: 'white', /*