我正在编写一个android应用程序,使用框架布局和片段作为其组件。
我有3个片段:社区片段
、TaskFormFrament
、TaskFrament
。
在社区片段中,用户按下一个按钮来创建一个任务。然后TaskFromFrament用addToBackStack
替换FrameLayout中的社区片段。因为在那之后,我想用后退按钮返回社区片段。
在TaskFormFragment中,用户按create按钮创建任务。然后TaskFragment打开,没有添加堆栈,因为我不想在按下后退按钮时显示TaskFormFragment。
它们都工作得很好。当我按下TaskFragment中的back按钮时,CommunityFragment显示出来。然而,在那个之后,若我打开TaskFormFragment并按下back按钮,它不会显示CommunityFragment!相反,它会打开TaskFragment。
这是怎么发生的?这是我的片段转换代码:
从社区片段到任务格式片段:
TaskFormFragment newFragment = new TaskFormFragment();
Bundle args = new Bundle();
args.putLong("taskTypeId", taskTypeId);
args.putLong("communityId", community.getId());
newFragment.setArguments(args);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
从TaskFormFragment到TaskFragment:
TaskFragment newFragment = new TaskFragment();
Bundle args = new Bundle();
args.putLong("taskId", task.getId());
newFragment.setArguments(args);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, newFragment);
transaction.commit();
编辑:我在以下条目中找到了解决方案:Android片段后堆栈问题
一旦用户在任务片段中按下back键并返回到社区片段,您应该清除BackBackback。你的问题是它没有被清除,所以当你按下back键时,你会转到上一笔交易。
编辑:
所以在你的社区片段被替换之前,运行这个
for(int i =0;i<fragmentmanager.getBackStackEntryCount();i++){
fragmentmanager.popbackstack();
}
看看能不能解决
我在另一个帖子中找到了解决方案。我已将该方法添加到包含FrameLayout的Activity类中:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
return false;
} else {
getSupportFragmentManager().popBackStack();
removeCurrentFragment();
return false;
}
}
return super.onKeyDown(keyCode, event);
}
public void removeCurrentFragment() {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment currentFrag = getSupportFragmentManager().findFragmentById(R.id.detailFragment);
if (currentFrag != null)
transaction.remove(currentFrag);
transaction.commit();
}
这个问题的描述和解决方案是在这里:Android片段背栈的问题
在写这个之前,我已经经历了很多stackoverflow问题。我对这个家伙的碎片背栈很困惑。 我在一个活动中的同一个容器上添加了三个片段 现在我想要的是,当用户按下片段3上的后退按钮时,它应该出现在第一个片段上,所以我已经覆盖了onBackPressed()方法。 但屏幕上什么也没发生,它让片段3继续运行。 更新 任何实现这一点的解决方案。
我对libGDX有一个问题,当我用后退按钮退出后恢复应用程序时,只有一个白色屏幕。 实际应用运行,接受触摸输入,播放声音,但屏幕只是白色。 我读过保持对纹理的静态引用可能会导致这个问题,但我没有这样做。 下面是我的资产代码如何工作的简化版本。 在按下后退按钮后返回应用程序时,重新创建AssetManager,重新打开SplashScreen(为白色),并更新AssetManager直到重新加载所有
问题内容: 我想在片段类中禁用后退按钮。在此片段中似乎不起作用。如何禁用后退按钮? 这是我的示例代码: 问题答案: 您必须重写父FragmentActivity类的onBackPressed。因此,将您的代码放在父FragmentActivity中。或者,您可以使用以下方法调用父方法: 在FragmentActivity中重写onBackPressed方法,而不调用其超类来禁用后退按钮。
我开始创建一个应用程序,它使用一个活动(导航抽屉)和许多片段。但我无法使用工具栏上的“后退”按钮从片段中导航回来。硬件后退按钮工作正常。我知道我需要覆盖选项ItemSelected,捕捉android。R、 id.home,检查后堆栈中是否有内容,然后弹出它。在更改片段后,“burger”按钮变为“back arrow”,但当我单击它时,选项ItemSelected将打开NavigationDra
我正在使用Actionbar和它的“up”按钮从一个细节活动返回到主活动,这很好。类似地,用户可以按系统“后退”按钮返回到主活动。 在我的主要活动中,在中,从internet下载数据,以便在应用程序启动时显示。我注意到,当我使用Actionbar“up”按钮从细节转到主要活动时,运行,重新下载数据。但是当我使用系统“后退”按钮时,没有运行,因此立即显示主活动视图。 我在详细信息活动中用于实现“向上