我目前正在开发一个项目,其活动由两个片段组成。
所以,我要做的是仅在应用程序在平板电脑上运行时并排显示这两个片段。当应用程序在手机中运行并且用户按下一行时,第二个片段应显示在顶部。
此外,我在屏幕顶部有一个操作栏,它实现了通常的后退按钮。
当我选择了一些复选框时打开第二个片段时存在问题。当我按下后退按钮,导航我到第一个片段时,将不会选中复选框。
显然没有调用onSaveInstanceSate方法(因为父活动没有被暂停),所以我无法保存存储已检查行的ArrayList。
最后但并非最不重要的是,片段是动态添加的。
问题
如何在用户使用
时正确实现后退按钮答案 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。我稍后会更新该部分,但我现在必须运行。