在片段中为工具栏设置“主页”按钮的启用状态

6
Android studio 1.3
com.android.support:appcompat-v7:22.1.1

你好,

我正在使用新的工具栏并在我的片段中显示。然而,我希望能够通过 setHomeButtonEnabled(true) 返回到上一个片段。但是,在我的片段的onCreateView中没有这样的函数。这在Activity中可以工作,但在片段中不起作用。

有没有办法使工具栏显示setHomeButtonEnabled,以便用户可以看到箭头并返回。

public class FileTransferFragment extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setHasOptionsMenu(true);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_file_transfer, container, false);

        final Toolbar toolbar = (Toolbar)view.findViewById(R.id.app_bar);
        AppCompatActivity appCompatActivity = (AppCompatActivity)getActivity();
        appCompatActivity.setSupportActionBar(toolbar);

    /* TRIED THIS BUT DIDN'T WORK */
        appCompatActivity.getActionBar().setHomeButtonEnabled(true);
        appCompatActivity.getActionBar().setDisplayHomeAsUpEnabled(true);
        return view;
    }
}

在我的Activity中,我扩展了AppCompatActivity并使用appcompat-v7:22.1.1

public class FileTransferActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file_transfer);

        if(savedInstanceState == null) {
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.add(R.id.fragment_container,
                    FileTransferFragment.getFileTransferFragment(1234), "FileTransferFragment");
            fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            fragmentTransaction.commit();
        }
    }
}

如您所见,工具栏左侧没有箭头以允许用户返回。 enter image description here

将操作栏设置在片段的父活动中,而不是在onCreateView()方法中。要在片段中获取操作栏,在onActivityCreated()方法中使用((AppCompatActivity)getActivity()).getSupportActionBar(),然后您可以进行自定义设置。 - Alok Nair
你能告诉我对于actionBar,你是否正在使用Toolbar小部件吗? - Ajay P. Prajapati
1
我正在使用support-v7-widget-toolbar。 - ant2009
我已经给出了解决方案,请尝试一下...它百分之百有效! - Ajay P. Prajapati
2个回答

9

使用

   appCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

代替
   appCompatActivity.getActionBar().setDisplayHomeAsUpEnabled(true);

谢谢,那解决了我的问题。我有个小问题,为什么需要将AppCompactActivity强制转换?当getActivity()返回的是AppCompactActivity的子类FragmentActivity时呢?希望你明白我的意思。谢谢。 - ant2009

1
如果您在片段中启用了actionBar,那是很好的事情。现在,如果想要启用导航抽屉图标(也称为汉堡图标),则需要在片段中使用以下方法。
首先创建实例。
private ActionBarDrawerToggle drawerToggle;
private DrawerLayout mDrawerLayout;

你需要上述实例。
drawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close){

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            //Todo
            //you don't have to write here anything to enable icon
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            //Todo
            //you dont have to write here anything to enable icon
        }

    };
    mDrawerLayout.setDrawerListener(drawerToggle); 

在此之后,您的片段应该有一种方式来通知主活动抽屉何时关闭或打开。您可以通过syncState()方法实现这一点。
    mDrawerLayout.post(new Runnable(){

        @Override
        public void run(){
            //enable hamburger icon
            drawerToggle.syncState();
        }

    });

你可以将整个内容作为单独的方法在片段中实现,并从主程序调用。
阅读此处的文档以获取有关整个类的更多信息。 ActionBarDrawerToggle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接