我正在使用PagerSlidingTabStrip库进行ViewPagerhttps://github.com/astuetz/PagerSlidingTabStrip。我想在滚动时更改片段。我用下面的代码实现了这个目标。
main活动.java

public class MainActivity extends SherlockFragmentActivity {

private MyPagerAdapter adapter;
ViewPager pager;
private PagerSlidingTabStrip tabs;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
    pager = (ViewPager) findViewById(R.id.pager);
    adapter = new MyPagerAdapter(getSupportFragmentManager());

    pager.setAdapter(adapter);

    final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
            .getDisplayMetrics());
    pager.setPageMargin(pageMargin);

    tabs.setViewPager(pager);

}

public class MyPagerAdapter extends FragmentPagerAdapter {
    private final String[] TITLES = {"First","Second","Third"};
    private SherlockFragment[] fragments = new SherlockFragment[] { new FirstFragment(), new SecondFragment(), new ThirdFragment()};

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return TITLES[position];
    }

    @Override
    public int getCount() {
        return TITLES.length;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments[position];
    }

}
}

firstfragment.java文件
public class FirstFragment extends SherlockFragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    final View v = inflater.inflate(R.layout.fragment_main, container, false);
    Toast.makeText(getSherlockActivity(), "This is from first", Toast.LENGTH_SHORT).show();
    return v;
}
}

第二片段.java
public class SecondFragment extends SherlockFragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    final View v = inflater.inflate(R.layout.fragment_main, container, false);
    Toast.makeText(getSherlockActivity(), "SecondFragment", Toast.LENGTH_SHORT).show();
    return v;
}
}

第三部分.java
public class ThirdFragment extends SherlockFragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    final View v = inflater.inflate(R.layout.fragment_main, container, false);
    Toast.makeText(getSherlockActivity(), "ThirdFragment", Toast.LENGTH_SHORT).show();
    return v;
}
}

我拿到了三块碎片,正在用烤面包机测试。
当应用程序以main活动打开时,firstfragment附加到Activity,但它显示两个toast,一个来自firstfragment,另一个来自secondfragment,当我滚动到second选项卡时,它显示thirdfragment的toast。
所以,我想是这样的。如果我从左向右滚动,将显示从右到当前片段的片段,如果我从右向左滚动,将显示从左到当前片段的片段。请帮忙。
谢谢。

最佳答案

这是因为片段缓存。当您访问某些片段时,也会创建与之对应的同级片段(调用oncreate())。

10-07 19:21
查看更多