为什么popBackStack无法使用FragmentStatePagerAdapter还原到以前的片段?

时间:2018-10-03 09:54:32

标签: android android-fragments

我有一个定购传呼机适配器

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;


import java.util.ArrayList;
import java.util.List;

public class OrderPagerAdapter extends FragmentStatePagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    private FragmentManager fm;

    public OrderPagerAdapter(FragmentManager fm) {
        super(fm);
        this.fm = fm;
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
       fm.beginTransaction().addToBackStack(null).commit();
    }

    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

}

我的主要订单活动类中的方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_order);
    datasource = new Datasource(this);
    categoryFragment = new CategoryFragment();
    productFragment = new ProductFragment();
    detailFragment = new DetailFragment();
    mViewPager = (ViewPager) findViewById(R.id.pager2);
    mOrderPagerAdapter = new OrderPagerAdapter(getSupportFragmentManager());
    setupViewPager(mViewPager);
}

private void setupViewPager(ViewPager viewPager) {
    mOrderPagerAdapter.addFragment(categoryFragment, "category");
    mOrderPagerAdapter.addFragment(productFragment, "product");
    mOrderPagerAdapter.addFragment(detailFragment, "s");
    viewPager.setAdapter(mOrderPagerAdapter);
    }

public void setViewPager(int fragmentNumber) {
    mViewPager.setCurrentItem(fragmentNumber);
}

Popbackstack方法

  @Override
    public void onBackPressed() {
       getSupportFragmentManager().popBackStack();
    }

每当我单击onBackPressed按钮时,以前的片段没有加载,为什么会发生这种情况?我已经尝试了多种方法,例如添加到Backstack,然后再提交。但是似乎没有一种方法可行。

1 个答案:

答案 0 :(得分:0)

您在viewpager中使用它吗?如果您在任何布局/容器中添加了带有fragmentTransaction的片段,则此方法将为您工作。

如果您想返回上一页,请使用viewPager.setCurrentItem(viewPager.getCurrentItem()-1);