Android Fragments:防止多次addToBackStack调用


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;

}

当按下按钮时,片段被替换,前一个被放入回堆栈。问题是,如果按钮被按了几次,相同的片段就会被多次放置在backstack中,这导致手机返回按钮必须按x次才能返回到前一个片段。

是否有一种方法来控制这只添加回堆栈一次?

给你的交易一个标签:

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
}

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

最新更新