【问题标题】:Back Stack in fragments not working返回 碎片中的堆栈不起作用
【发布时间】:2017-05-23 11:13:30
【问题描述】:

我有一个家庭活动,我正在根据需要替换片段。

在家庭活动中,我有主片段,然后从主片段中我正在替换传输片段,从传输片段中我正在替换 TransportList 片段。

现在,当我从 TransportList 片段返回时,我看到的是主片段而不是 Transport 片段。

我已将片段添加到 backstack,它仍然像这样工作。

家庭活动

public class HomeActivity extends AppCompatActivity{

    private boolean mBackPressCancelled = false;
    private static final long BACK_PRESS_DELAY = 10000;
    private long mBackPressTimestamp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FragmentManager fragmentManager = HomeActivity.this.getFragmentManager();
        MainFragment fragment = new MainFragment();
        fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        fragmentManager.beginTransaction().replace(R.id.mycontainer, fragment,"MAIN_FRAGMENT").commitAllowingStateLoss();

    }

    @Override
    public void onBackPressed() {

        // Do nothing if the back button is disabled.
        if (!mBackPressCancelled) {

            // Pop fragment if the back stack is not empty.

            if (getFragmentManager().getBackStackEntryCount() > 0) {

                mTxtTitle.setVisibility(View.GONE);
                mLogo.setVisibility(View.VISIBLE);

                super.onBackPressed();
            }
            else {
                if (snackbar != null) {
                    snackbar.dismiss();
                }
                long currentTimestamp = System.currentTimeMillis();

                if (currentTimestamp < mBackPressTimestamp + BACK_PRESS_DELAY) {
                    super.onBackPressed();
                } else {
                    mBackPressTimestamp = currentTimestamp;

                    Toast.makeText(this,"press again",Toast.LENGTH_LONG).show();
                }
            }
        }
    }
}

运输片段:

       mBtnSearch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            FragmentManager fragmentManager = getFragmentManager();
            TransportListFragment fragment1 = new TransportListFragment();
            fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            fragmentManager.beginTransaction().replace(R.id.mycontainer, fragment1).addToBackStack("G").commit();

        }
    });

这里出了什么问题,请帮忙。谢谢。

【问题讨论】:

    标签: java android android-fragments fragment-backstack


    【解决方案1】:

    向 BackStack 添加新的 Fragment 时,只需删除以下行:

    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    

    【讨论】:

      猜你喜欢
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多