当前位置:  开发笔记 > Android > 正文

如何从包含的片段控制活动的向上按钮?

如何解决《如何从包含的片段控制活动的向上按钮?》经验,为你挑选了1个好方法。

我正在构建一个非常简单的应用程序.它的核心是2个屏幕:
1)列表屏幕:项目列表
2)细节屏幕:项目的详细视图

我使用一个Activity(扩展AppCompatActivity)与Action-Bar,Navigation-Drawer和主内容部分(FrameLayout).
我在2个屏幕上使用了2个不同的片段:

打开应用程序时,我将列表片段扩展到主要内容部分.
当单击列表中的项目时,我将详细信息片段膨胀到主要内容部分,这一切都运行良好. 我的应用布局
在详情屏幕上,我希望Action-Bar显示一个返回列表屏幕的按钮.
考虑到我使用片段而不是单独的活动这一事实,我该如何实现?



1> Daniel Nugen..:

您可以在每次加载详细信息片段时启用向上按钮,并在任何其他片段加载时禁用它.

首先在Activity中定义这些方法,您可以从Fragments调用这些方法以显示/隐藏向上按钮:

public void showUpButton() {
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

public void hideUpButton() {
    getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}

您可能只想在详细信息碎片的Resume()中启用向上按钮(MainActivity只是一个示例,更改为您的Activity的名称).....

@Override
public void onResume() {
    super.onResume();
    MainActivity activity = (MainActivity)getActivity();
    if (activity != null) {
      activity.showUpButton();
    }

}

然后在其他片段中:

@Override
public void onResume() {
    super.onResume();
    MainActivity activity = (MainActivity)getActivity();
    if (activity != null) {
      activity.hideUpButton();
    }

}

接下来就是让按钮实际返回.首先确保将带有向上按钮的Fragment添加到后端堆栈,然后将其添加到该Fragment.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        ((MainActivity)getActivity()).onBackPressed();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

然后在Activity中,如果FragmentManager有任何条目,则覆盖onBackPressed()并从后向堆栈弹出:

@Override
public void onBackPressed() {

    FragmentManager fragmentManager = getSupportFragmentManager();
    if (fragmentManager.getBackStackEntryCount() > 1) {
        fragmentManager.popBackStackImmediate();
    } else {
        super.onBackPressed();
    }
}

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有