我正在以编程方式创建多个片段。所有这些都具有不同的布局,并且在片段之间交换后,活动片段的布局会发生变化。
程序启动时FragmentPagerAdapter
创建前两个片段。如果我选择最后一个片段(例如第一个到第七个),FragmentPagerAdapter
开始创建第七个片段,然后是第六个片段。此时我想使用下面的代码选择当前片段。
`(FragmentMasaDesign) getSupportFragmentManager().getFragments().get
(myViewPager.getCurrentItem());`
myViewPager.getCurrentItem()
返回6.这是真的,因为我选择了第7个片段,其索引是6.但是我只有4个片段被创建,这些片段是1st-2nd-6th-7th。因此getFragments()
方法返回这四个fargments,并且由于myViewPager.getCurrentItem()
有没有办法在应用程序启动时创建所有片段,或者如何在创建其他片段之前获取当前片段?
答案 0 :(得分:4)
您可以使用offscreenpagelimit设置viewpager上的片段数。
viewpager.offscreenpagelimit(6);
答案 1 :(得分:0)
public class CollectionPagerAdapter extends FragmentPagerAdapter {
public ArrayList<Departman> lstDepartmanlar;
public ArrayList<MasaDizayn> lstMasaDizayn;
ArrayList<String> masaIsimleri;
public String[] masaPlanIsmi;
Fragment fragment;
public Fragment[] fragments = null;
public static FragmentMasaDesign newInstance(ArrayList<String> masalar, String DepartmanAdi) {
FragmentMasaDesign myFragment = new FragmentMasaDesign();
Bundle args = new Bundle();
args.putStringArrayList("masalar", masalar);
args.putString("departmanAdi", DepartmanAdi);
myFragment.setArguments(args);
return myFragment;
}
public CollectionPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
fragment = null;
if (fragments == null)
fragments = new Fragment[lstDepartmanlar.size()];
for (int j = 0; j < lstDepartmanlar.size(); j++) {
if (i == j) {
for (Departman departman : lstDepartmanlar) {
if (departman.DepartmanEkrani.contentEquals(masaPlanIsmi[i])) {
masaIsimleri = new ArrayList<String>();
for (MasaDizayn masaDizayn : lstMasaDizayn) {
if (masaDizayn.MasaPlanAdi.contentEquals(departman.DepartmanEkrani)) {
masaIsimleri.add(masaDizayn.MasaAdi);
}
}
}
}
fragment = newInstance(masaIsimleri, lstDepartmanlar.get(i).DepartmanAdi);
}
}
fragments[i] = fragment;
return fragment;
}
@Override
public int getCount() {
return lstDepartmanlar.size();
}
@Override
public CharSequence getPageTitle(int position) {
return "OBJECT " + (position + 1);
}
}
我创建了一个公共片段数组,然后将创建的片段存储在这个数组中,然后我从这个数组中调用了当前片段,如:
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
mViewPager.setCurrentItem(tab.getPosition());
fragment = collectionPagerAdapter.fragments[mViewPager.getCurrentItem()];
}
还可以在屏幕上找到可见片段。我稍后会分享它的代码。
感谢所有花时间回答问题的人。
答案 2 :(得分:0)
您可以将一个片段替换为另一个片段,如下所示
DiplayFragment newFragment = new DiplayFragment();
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction
.replace(R.id.nav_fl_frag_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();