Android Fragment:防止多个addToBackStack调用

时间:2014-07-22 19:47:48

标签: java android android-fragments

public void onClick(View v) {
    switch(v.getId())
    {
    case R.id.bAddYourNumber:
        FragmentTransaction trans = getFragmentManager().beginTransaction();
        trans.replace(R.id.root_frame, new InsertPastNumbersFragment());
        trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

        trans.addToBackStack(TAG);
        trans.commit();

        break;

}

按下按钮时,片段被替换,前一个片段被放入后栈。 问题是如果按下按钮几次,相同的片段被多次放入后台堆叠,这导致按下电话后退按钮x按下按钮的次数返回到前一个片段。

有没有办法控制它只能添加到后栈一次?

1 个答案:

答案 0 :(得分:1)

为您的交易添加标签:

trans.replace(R.id.root_frame, new InsertPastNumbersFragment())

变为

trans.replace(R.id.root_frame, new InsertPastNumbersFragment(), PAST_NUM_TAG)

然后,在处理交易之前,请检查:

if (getFragmentManager().findFragmentByTag(PAST_NUM_TAG) == null) {
    // Fragment hasn't yet been added, do the transaction
} else {
    // Fragment has already been added
}

或者,如果您有一个触发此按钮的按钮,则在添加片段后禁用按钮可能更有意义,以防止用户多次按下它。