我一直与FragmentActivity
和TabHost
合作,以编程方式添加/删除/替换Fragment
。
我使用的是:
public void addFragments(String tabName, Fragment fragment,
boolean animate, boolean add, Bundle bundle) {
currentSelectedTab = tabName;
if (add) {
hMapTabs.get(tabName).add(fragment);
}
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
if (animate) {
ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);
}
if (bundle!=null){
fragment.setArguments(bundle);
}
ft.replace(R.id.realtabcontent, fragment, tabName);
ft.commitAllowingStateLoss();
}
public void removeFragment() {
Fragment fragment = hMapTabs.get(currentSelectedTab).get(
hMapTabs.get(currentSelectedTab).size() - 2);
hMapTabs.get(currentSelectedTab).remove(
hMapTabs.get(currentSelectedTab).size() - 1);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.realtabcontent, fragment);
ft.commitAllowingStateLoss();
}
有了这个,一切正常。
现在我正在尝试在ViewPager
的页面上管理此片段的行为。
我一直在StackOverFlow上搜索三个小时,每次都越来越困惑。例如,在FragmentPagerAdapter
上尝试使用公共函数。
只有这样才能使我在添加片段时成为白色空白屏幕。
你会怎么做?
提前致谢。
答案 0 :(得分:0)
我找到了解决问题的方法,但我不知道它是否有效。
我定义HashMap
以保留我的碎片:
private HashMap<Integer, ArrayList<Fragment>> hMapTabs = new HashMap<Integer, ArrayList<Fragment>>();
然后我初始化它并添加我的每个位置的第一个片段(在这种情况下,片段是相同的)。
hMapTabs.put(0, new ArrayList<Fragment>());
hMapTabs.put(1, new ArrayList<Fragment>());
hMapTabs.put(2, new ArrayList<Fragment>());
hMapTabs.get(0).add(new PrimerFragment());
hMapTabs.get(1).add(new PrimerFragment());
hMapTabs.get(2).add(new PrimerFragment());
我将我的适配器设置为我的ViewPager。这将是FragmentAdapterPager
:
public class CollectionPagerAdapter extends FragmentStatePagerAdapter {
final int NUM_ITEMS = 3; // number of tabs
FragmentManager fm;
HashMap<Integer, ArrayList<Fragment>> hMapTabs;
public CollectionPagerAdapter(FragmentManager fm, HashMap<Integer, ArrayList<Fragment>> hMapTabs) {
super(fm);
this.fm = fm;
this.hMapTabs = hMapTabs;
}
@Override
public Fragment getItem(int position) {
return hMapTabs.get(position).get(hMapTabs.get(position).size()-1);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public CharSequence getPageTitle(int position) {
String tabLabel = null;
switch (position) {
case 0:
tabLabel = "tab1";
break;
case 1:
tabLabel = "tab2";
break;
case 2:
tabLabel = "tab3";
break;
}
return tabLabel;
}
}
从每个片段,我可以使用函数添加或删除片段:
public void addFragment(int position, Fragment frag) {
hMapTabs.get(position).add(frag);
mCollectionPagerAdapter = new CollectionPagerAdapter(
getSupportFragmentManager(), hMapTabs);
mViewPager.setAdapter(mCollectionPagerAdapter);
}
public void removeFragment(int position) {
hMapTabs.get(position).remove(
hMapTabs.get(position).size() - 1);
mCollectionPagerAdapter = new CollectionPagerAdapter(
getSupportFragmentManager(), hMapTabs);
mViewPager.setAdapter(mCollectionPagerAdapter);
}
@Override
public void onBackPressed() {
int position = mViewPager.getCurrentItem();
if (hMapTabs.get(position).size() <= 1) {
super.onBackPressed();
} else {
removeFragment(position);
}
}
但我无法做的是添加动画...我该怎么做? :d