我有一个活动A加载片段F 10次;对于数组列表中的每个问题一次。问题是,如果我正在查看问题4并且我决定回去(我有一个按钮导航回来而另一个向前推进),它似乎永远不会忘记那个特定的位置(第4号)因为在到达之后问题1,如果我点击下一个(或前进按钮),它会跳回到第4个问题而不是第2个问题。
以下是使用新问题加载新片段的代码:
@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);
}
}
}
这是设置片段的实用方法:
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();
}
每次我设置一个新片段时,我都会将它添加到后台堆栈,每当有人点击PREV按钮时,我会弹出后面的堆栈。所以我很困惑(还是Android新手)并且不知道如何解决这个问题:
我想看到的是,当我点击下一个按钮时,它应该转到下一个问题(在数学上将是currentQuestion + 1,当我点击上一个按钮时,它应该转到currentQuestion-1,无论我在哪里停下来改变方向,这都应该是真的。
提前致谢。每一个帮助都非常感谢!
答案 0 :(得分:2)
我修好了伙计!我可能会考虑在将来使用更好的解决方案但是现在,我所要做的就是在PREV按钮中反转过程并检查数组索引以避免异常。
以下是我需要的PREV按钮代码功能:
首先,设置它们时不要将碎片添加到后堆栈。然后这样做:
@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");
}
}
感谢那些提出想法的人。