Fragment切換問題

片段一: add hind

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.rb_common_frame://經常使用框架
position = 0;
break;
case R.id.rb_thirdparty://第三方
position = 1;
break;
case R.id.rb_custom://自定義
position = 2;
break;
case R.id.rb_other://其餘
position = 3;
break;
default:
position = 0;
break;
}

//根據位置獲得對應的Fragment
BaseFragment to = getFragment();
//替換
switchFrament(mContent,to);
/**
*
* @param from 剛顯示的Fragment,立刻就要被隱藏了
* @param to 立刻要切換到的Fragment,一會要顯示
*/
private void switchFrament(Fragment from,Fragment to) {
if(from != to){
mContent = to;
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
//才切換
//判斷有沒有被添加
if(!to.isAdded()){
//to沒有被添加
//from隱藏
if(from != null){
ft.hide(from);
}
//添加to
if(to != null){
ft.add(R.id.fl_content,to).commit();
}
}else{
//to已經被添加
// from隱藏
if(from != null){
ft.hide(from);
}
//顯示to
if(to != null){
ft.show(to).commit();
}
}
}

}

/**
* 根據位置獲得對應的Fragment
* @return
*/
private BaseFragment getFragment() {
BaseFragment fragment = mBaseFragment.get(position);
return fragment;
}
片段二:
 private void switchFrament(BaseFragment fragment) {
//1.獲得FragmentManger
FragmentManager fm = getSupportFragmentManager();
//2.開啓事務
FragmentTransaction transaction = fm.beginTransaction();
//3.替換
transaction.replace(R.id.fl_content, fragment);
//4.提交事務
transaction.commit();
}
 
片段三:
//初始化Fragmet
private void initFragment() {
fragmentList.clear();
ItemFragmentOrder itemFragmentOrder = new ItemFragmentOrder();
ItemFragmentIntent itemFragmentIntent = new ItemFragmentIntent();
fragmentList.add(itemFragmentOrder);
fragmentList.add(itemFragmentIntent);
}
//初始化ViewPager
private void initViewPager() {
mPageAdapter = new MainFragmentPageAdapter(activity.getSupportFragmentManager());
viewPager.setAdapter(mPageAdapter);
viewPager.setOffscreenPageLimit(fragmentList.size());
}
//fragmentViewPaager適配器
class MainFragmentPageAdapter extends FragmentPagerAdapter {

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

@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}

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

//切換頁面
public void showFragment(int position) {
viewPager.setCurrentItem(position, false);
}
片段四:
@Override
public Fragment getItem(int position) {
BaseFragment fragment = null;
switch (fragmentFlag) {
case FragmentMainVp:
switch (position) {
case MainActivity.fristPage:
fragment = new FragmentFirst();
break;
case MainActivity.order:
fragment = new FragmentOrder();
break;
case MainActivity.mine:
fragment = new FragmentMine();
break;
}//end of switch
break;
}//end of switch
Bundle bundle = new Bundle();
bundle.putInt(BaseFragment.ParamIndex, position);
if (null != paramBundle) bundle.putBundle(BaseFragment.ParamBundle, paramBundle);
if (null != fragment) fragment.setArguments(bundle);
if (null != fragmentAry) fragmentAry[position] = fragment;
return fragment;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);//獲得緩存的fragment
if (needReload && null != fragment && null != fm) {
String fragmentTag = fragment.getTag();//獲得tag,這點很重要
FragmentTransaction ft = fm.beginTransaction();
if (null != ft) {
ft.remove(fragment);//移除舊的fragment
fragment = getItem(position);//換成新的fragment
ft.add(container.getId(), fragment, fragmentTag);//添加新fragment時必須用前面得到的tag,這點很重要
ft.attach(fragment);
fragment.setUserVisibleHint(true);
ft.commit();
}//end of if
if ((getCount() - 1) == position)
needReload = false;//清除更新標記(只有從新啓動的時候須要去建立新的fragment對象),防止正常狀況下頻繁建立對象
}//end of if
return fragment;
}

@Override
public int getCount() {
return tabTitleCount;}
相關文章
相關標籤/搜索