java - 尝试在我的 Android 应用程序中 setDisplayHomeAsUpEnabled(true) ,它给了我一个 NullPointerException

标签 java android android-fragments nullpointerexception android-actionbar

我的应用程序作为具有不同 fragment 的单个 Activity 。我通过左侧的抽屉导航导航 fragment 。问题是我需要为每个 fragment 拥有不同的工具栏。

我所做的是将工具栏设置在 fragment 的布局中,如下所示:

<RelativeLayout 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"
    android:orientation="vertical"
    tools:context="com.hectorviov.###.activity.HomeFragment">

    <include
        android:id="@+id/toolbar_logo"
        layout="@layout/toolbar_logo" />
...

并将其设置为我的 fragment 上的 SupportActionBar:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AppCompatActivity act = (AppCompatActivity)getActivity();

    Toolbar mToolbar = act.findViewById(R.id.toolbar_logo);

    act.setSupportActionBar(mToolbar);
}

它工作正常,问题是,它没有在操作栏左侧显示汉堡包图标。它向我显示了一个警告:

W/ActionBarDrawerToggle: DrawerToggle may not show up because NavigationIcon is not visible. You may need to call actionbar.setDisplayHomeAsUpEnabled(true);

所以在谷歌搜索了很多之后我尝试了不同的方法来做到这一点。我尝试的最后一个是:

((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);

无论我尝试什么,它总是给我一个 NullPointerException:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hectorviov.###/com.hectorviov.###.activity.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.setDisplayShowHomeEnabled(boolean)' on a null object reference
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)

请帮忙!!

最佳答案

试试这个

AppCompatActivity activity = (AppCompatActivity) getActivity();
if (activity != null) {
    ActionBar ab = activity.getSupportActionBar();
    if (ab != null) {
        ab.setDisplayHomeAsUpEnabled(true);
    }
}

引用this link会帮助你的。

不显示汉堡包图标? 您需要添加 ActionBarDrawerToggle 对象

public class DrawerActivity extends AppCompatActivity {

private DrawerLayout drawerLayout;
private ActionBarDrawerToggle drawerToggle;



private void setupDrawerLayout() {
     drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
     drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open, R.string.close);
     drawerLayout.setDrawerListener(drawerToggle);
}



@Override
protected void onPostCreate(Bundle savedInstanceState) {
     super.onPostCreate(savedInstanceState);
     drawerToggle.syncState();
}

关于java - 尝试在我的 Android 应用程序中 setDisplayHomeAsUpEnabled(true) ,它给了我一个 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48472601/

相关文章:

java - 如何在带有注释的 Spring 中按名称 Autowiring ?

java - 在 GWT 中序列化对象

android - 在 Retrofit 并行网络调用中处理后台刷新 token 调用

android - 如何结合place autoComplete Fragment和navigation drawer

android - 如何在 android 中使用 android-support-v4.jar 禁用 ViewPager 滑动

java - Java String getBytes ISO_8859_1 的 Node.js 等效项

java - 我需要与许多其他对象共享一个对象——我读过关于单例的投诉,那么我应该使用什么来代替?

Android Json结果处理

Android - FTPClient - mlistFile 返回 null

android - 方向 : restore ListView position that is inside a Fragment