gpt4 book ai didi

java - 如何修复 Android Activity 中的 BackStack 问题?

转载 作者:行者123 更新时间:2023-11-29 21:16:28 25 4
gpt4 key购买 nike

我有一个 Activity A 加载 Fragment F 10 次;数组列表中的每个问题一次。问题是,如果我正在查看第 4 个问题并决定返回(我有一个按钮可以向后导航,另一个按钮可以向前导航),它似乎永远不会忘记那个特定的位置(第 4 个),因为到达后第 1 个问题,如果我单击“下一步”(或前进按钮),它会跳回到第 4 个问题而不是第 2 个问题。

这是加载带有新问题的新 fragment 的代码:

@Override
public void onNextQuestion(){
Bundle bundle = new Bundle();
Log.d("ANSWERS", " " + finalAnswers.size());
if(new_position == questions.size()-1){
setFragment(new SurveyEmailFrag(), "emailFrag");
}else{
bundle.putString("question", questions.get(new_position+1));
SurveyQuestionFrag newSurveyFrag = new SurveyQuestionFrag();
newSurveyFrag.setArguments(bundle);
Log.d("NEWFRAG", " " + newSurveyFrag.answer);
if(new_position < questions.size()){
setFragment(newSurveyFrag, "frag_" + new_position);
new_position++;
Log.d("POS", ""+new_position);
}
}
}

这是设置 fragment 的实用方法:

public void setFragment(Fragment frag, String tag)
{
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

Fragment fragment = getFragmentManager().findFragmentById(R.id.surveyContainer);
if(fragment == null)
{
ft.add(R.id.surveyContainer, frag, tag);
} else {
ft.replace(R.id.surveyContainer, frag, tag);
}
ft.addToBackStack(null);
ft.commit();
}

当我点击 PREV 按钮时,我会这样做:

@Override
public void onPreviousMove(){
getFragmentManager().popBackStackImmediate();
}

每次我设置一个新的 Fragment 时,我都会将它添加到返回堆栈 并且每次有人单击 PREV 按钮时,我都会弹出返回堆栈。所以我很困惑(Android 还是新手)并且不知道如何解决这个问题:

我想看到的是,当我单击 NEXT 按钮时,它应该转到下一个问题(数学上应该是 currentQuestion+1,当我单击上一个按钮时,它应该转到 currentQuestion-1,无论我在哪里停下来改变方向,这都应该是正确的。

提前致谢。非常感谢您的帮助!

最佳答案

我修好了伙计们!我可能会考虑在未来使用更好的解决方案,但现在,我所要做的就是在 PREV 按钮中反转过程并检查数组索引以避免异常。

这是我需要的 PREV 按钮代码功能:

首先,设置 fragment 时不要将它们添加到返回堆栈中。然后这样做:

@Override
public void onPrevQuestion(){
//TODO : do some magic here to reverse course
Bundle bundle = new Bundle();
Log.d("ANSWERS", " " + finalAnswers.size());


if(new_position > 0){
bundle.putString("question", questions.get(new_position-1));
SurveyQuestionFrag newSurveyFrag = new SurveyQuestionFrag();
newSurveyFrag.setArguments(bundle);
setFragment(newSurveyFrag, "frag_" + new_position);
new_position--;
Log.d("POS", ""+new_position);
}else{
setFragment(new RateExperienceFrag(), "rateEx");
}


}

感谢那些提出想法的人。

关于java - 如何修复 Android Activity 中的 BackStack 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com