片段之间的后退按钮

时间:2014-04-10 13:40:31

标签: android android-fragments

我目前正在开发一个项目,其活动由两个片段组成。

  • 第一个片段显示自定义可展开列表。每行都是从自定义布局创建的,其中右侧有一个复选框。
  • 第二个片段显示有关列表中单击行的更多详细信息。要打开第二个片段,用户必须单击该行。该复选框用于其他原因。

所以,我要做的是仅在应用程序在平板电脑上运行时并排显示这两个片段。当应用程序在手机中运行并且用户按下一行时,第二个片段应显示在顶部。

此外,我在屏幕顶部有一个操作栏,它实现了通常的后退按钮。

当我选择了一些复选框时打开第二个片段时存在问题。当我按下后退按钮,导航我到第一个片段时,将不会选中复选框。

显然没有调用onSaveInstanceSate方法(因为父活动没有被暂停),所以我无法保存存储已检查行的ArrayList。

最后但并非最不重要的是,片段是动态添加的。

问题

如何在用户使用

时正确实现后退按钮
  1. 平板电脑,应该使用后退按钮来关闭活动,或者
  2. 手机,所以后退按钮应该用作导航回第一个片段,能否恢复它以前的状态?

3 个答案:

答案 0 :(得分:1)

if (mFragmentManager.getBackStackEntryCount() == 0) {
        LogUtil.d(TAG,
                "home fragment" +      mFragmentManager.getBackStackEntryCount());

        this.finish();
    } else {

        mFragmentManager.popBackStackImmediate();


        }

尝试这应该工作,快乐编码

答案 1 :(得分:0)

我的第一个想法是在你的项目资源中创建一个布尔值:在“values”目录中,你的布尔值将是假的,例如,在你的“values-sw600dp”和“values-sw720dp-land”中“目录,布尔值是真的。

然后,在您的代码中,您将检查布尔值(使用R.boolean.your_boolean)以了解这是平板电脑还是手机。

然后,使用简单的if / else,您将实现您的代码,具体取决于您的布尔值......

if(yourBoolean){
//We are on a tablet
finish();
}else{
//We are on a handset
//Your code to navigate back...
}

答案 2 :(得分:0)

您需要(1)检测用户是否在平板电脑上,以及(2)相应地控制后退功能。我不确定您目前是如何检测该设备是否是平板电脑,但一种非常简单的方法是described here。它涉及一个布尔资源,您可以在自定义后退函数时访问该资源以确定设备类型。

我要做的是覆盖托管Activity中的onBackPressed并从那里控制回来的功能

@Override
public void onBackPressed(){
    boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
    if (tabletSize){
        moveTaskToBack(true);
    } else {
       //handle fragment back stack  
    }
}

处理后台堆栈和替换片段的信息是here in the android docs。我稍后会更新该部分,但我现在必须运行。