我的应用程序作为具有不同 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/