本帖最后由 zhanzkw 于 2014-10-21 18:47:35 编辑

解决方案 »

  1.   

    可以用 Fragments+ViewPager+ActionBar来实现
      

  2.   

    我不生产代码,我只是代码的搬运工,给你一位无私大神的贡献:http://download.csdn.net/download/ixiaobu/4743378
      

  3.   


    下载看了一下,代码写的很挫啊 ,加载完成之后,Fragment生命周期方法全部被废除了,根本无法使用
      

  4.   

    用个代理模式吧,一开始就生成fragment,如果fragment存在就不生成了,然后切换就行
      

  5.   


    大神  
    这样的话  会不会导致 Fragment生命周期方法全部被废除? 有相关的Demo吗
      

  6.   


    大神  
    这样的话  会不会导致 Fragment生命周期方法全部被废除? 有相关的Demo吗肯定不会了public class FragmentHolder {
    private FragmentManager fragmentManager; private String fragmentTag = "fragmentTag"; private static Fragment fragment1, fragment2, fragment3; public FragmentHolder(FragmentManager fragmentManager) {
    super();
    this.fragmentManager = fragmentManager;
    }
    private HashMap<String,Fragment> mfragment=new HashMap<String,Fragment>();
    /**
     * 无切换效果
     * 
     * @param posId
     */
    public void showFragment(int posId,String classId) {
    Fragment fragment = getFragment(posId,classId);
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.replace(R.id.fram_content, fragment);
    transaction.commit();
    } /**
     * left in/left out 切换效果
     * 
     * @param posId
     */
    public void switchFragment(int posId,String classId) {
    Fragment fragment = getFragment(posId,classId);
    Bundle bundle = new Bundle();
    bundle.putString("classId", classId);
    FragmentTransaction fragmentTransaction = this.fragmentManager
    .beginTransaction();
    if (this.fragmentManager.findFragmentByTag(fragmentTag) == null) {
    fragmentTransaction.add(R.id.fram_content, fragment, fragmentTag);
    } else {
    fragmentTransaction.setCustomAnimations(R.anim.push_right_in,
    R.anim.push_right_out);
    fragmentTransaction.detach(this.fragmentManager
    .findFragmentByTag(fragmentTag));
    fragmentTransaction.add(R.id.fram_content, fragment, fragmentTag);
    }
    if (fragmentTransaction != null && !fragmentTransaction.isEmpty())
    fragmentTransaction.commit();
    } private Fragment getFragment(int posId,String Id) {
    Bundle bundle=new Bundle();
    bundle.putString("classId", Id);
    switch (posId) {
    case R.id.xiangxi_tab:
    if (mfragment.get("xiangxi") == null) {
    fragment1 = new XiangQingFragment();
    fragment1.setArguments(bundle);
    mfragment.put("xiangxi", fragment1);
    }
    return mfragment.get("xiangxi");
    case R.id.biji_tab:
    if (mfragment.get("biji") == null) {
    fragment2 = new BiJiFragment();
    fragment2.setArguments(bundle);
    mfragment.put("biji", fragment2);
    }
    return mfragment.get("biji");
    case R.id.zhangjie_tab:
    if (mfragment.get("zhangjie") == null) {
    fragment3 = new ZhangJieFragment();
    fragment3.setArguments(bundle);
    mfragment.put("zhangjie", fragment3);
    }
    return mfragment.get("zhangjie");
    default:
    break;
    }
    return null;
    }
    }
      

  7.   

    /**
     * 设置当前的Fragment
     * 
     * @param index
     */
    public void setCurrentFragment(int... index) { if (index.length > 0) {
    fragmentIndex = index[0];
    }
    FragmentTransaction ftd = getSupportFragmentManager()
    .beginTransaction();
    switch (fragmentIndex) {
    case HOME_FRAGMENT:
    if (f1 == null) {
    f1 = new FragmentHome();
    }
    ftd.replace(R.id.content_view, f1);
    break;
    case BANK_FRAGMENT:
    if (f2 == null) {
    f2 = new FragmentBank();
    }
    f2.trans(this);
    ftd.replace(R.id.content_view, f2);
    break;
    case ACCOUNT_FRAGMENT:
    if (f3 == null) {
    f3 = new FragmentAccountNew();
    }
    f3.trans(this);
    ftd.replace(R.id.content_view, f3);
    break;
    case MORE_FRAGMENT:
    if (f4 == null) {
    f4 = new FragmentMore();
    }
    f4.trans(this);
    ftd.replace(R.id.content_view, f4);
    break; } ftd.commit();
    }这样每次从其中一个fragment进入activity时,只会触发该fragment的onpause和onstop。我的下方导航用的radiogroup,然后在它的oncheckedchang监听中
    OnCheckedChangeListener checkedChange = new OnCheckedChangeListener() { @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) { int index = HOME_FRAGMENT;
    switch (checkedId) {
    case R.id.tab_rb_1:
    index = HOME_FRAGMENT;
    break;
    case R.id.tab_rb_2:
    index = BANK_FRAGMENT;
    break;
    case R.id.tab_rb_3:
    index = ACCOUNT_FRAGMENT;
    break;
    case R.id.tab_rb_4:
    index = MORE_FRAGMENT;
    break;
    }
    setCurrentFragment(index);
    }
    };
      

  8.   

    http://blog.csdn.net/think_soft/article/details/7272869