如何在Android活动中修复我的后台堆栈问题?

时间:2014-01-23 16:13:44

标签: java android android-fragments android-activity back-stack

我有一个活动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,无论我在哪里停下来改变方向,这都应该是真的。

提前致谢。每一个帮助都非常感谢!

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");
    }


}

感谢那些提出想法的人。