Android架构之Activity和Fragment复杂嵌套

来源:互联网 发布:对讲机写频软件下载 编辑:程序博客网 时间:2024/05/24 07:42

像这种界面,需要在Activity里嵌套Fragment,Fragment里嵌套Fragment,此时,往往需要对Fragment做好栈的管理。

1.Activity中放置多个Fragment,而且能左右滑动切换

     list_fragment.add(ActiveAreaFragment.create(list.get(0).getId()));                        list_fragment.add(WanShuiFragment.create(list.get(1).getId()));                        list_fragment.add(BaoShuiFragment.create(list.get(2).getId()));                        list_fragment.add(HaiWaiFragment.create(list.get(3).getId()));                        list_fragment.add(QuanqiuFragment.create(list.get(4).getId()));
  tabFragmentPagerAdapter = new TabFragmentPagerAdapter(getContext(), getSurportFragmentManager(),                list_fragment, list_title, viewPager, (TabLayout) view.findViewById(R.id.tablayout)) {        };        viewPager.setAdapter(tabFragmentPagerAdapter);

2.Activity中放置多个Fragment,不能能左右滑动切换:

 switch (v.getId()) {            case R.id.layout_home:                replaceFragment(R.id.framelayout, createFragment(FRAGMENT_HOME));                resetTab();                tvs[0].setTextColor(getResources().getColor(R.color.red));                ivs[0].setImageResource(R.drawable.home_selected);                break;            case R.id.layout_dianpu:                replaceFragment(R.id.framelayout, createFragment(FRAGMENT_DINAPU));                resetTab();                tvs[1].setTextColor(getResources().getColor(R.color.red));                ivs[1].setImageResource(R.drawable.dianpu_selected);                break;            case R.id.layout_fenlei:                replaceFragment(R.id.framelayout, createFragment(FRAGMENT_FENLEI));                resetTab();                tvs[2].setTextColor(getResources().getColor(R.color.red));                ivs[2].setImageResource(R.drawable.fenlei_selected);                break;            case R.id.layout_gouwuche:                replaceFragment(R.id.framelayout, createFragment(FRAGMENT_GOUWUCHE));                resetTab();                tvs[3].setTextColor(getResources().getColor(R.color.red));                ivs[3].setImageResource(R.drawable.gouwuche_selected);                break;            case R.id.layout_my:                replaceFragment(R.id.framelayout, createFragment(FRAGMENT_MY));                resetTab();                tvs[4].setTextColor(getResources().getColor(R.color.red));                ivs[4].setImageResource(R.drawable.my_selected);                break;        }
@Override    public Fragment createFragment(int position) {        Fragment fragment = map_fragment.get(position);  //在集合中取出来Fragment        //如果在集合中没有取出来,需要重新创建        if (fragment == null) {            switch (position) {                case FRAGMENT_MY_UNLOGIN:                    fragment = new UnLoginMyFragment();                    break;                case FRAGMENT_MY_LOGINED:                    fragment = new LoginedMyFragment();                    break;                case FRAGMENT_HOME:                    fragment = new HomeFragment();                    break;                case FRAGMENT_DINAPU:                    fragment = new DianpuFragment();                    break;                case FRAGMENT_FENLEI:                    fragment = new FenleiFragment();                    break;                case FRAGMENT_GOUWUCHE:                    fragment = new CartFragment();                    break;                case FRAGMENT_MY:                    fragment = new MyFragment();                    break;            }            map_fragment.put(position, fragment);        }        return fragment;    }

3.Fragment中 放置多个Fragment,并且能左右滑动:

 list_fragment.add(ActiveAreaFragment.create(list.get(0).getId()));                        list_fragment.add(WanShuiFragment.create(list.get(1).getId()));                        list_fragment.add(BaoShuiFragment.create(list.get(2).getId()));                        list_fragment.add(HaiWaiFragment.create(list.get(3).getId()));                        list_fragment.add(QuanqiuFragment.create(list.get(4).getId()));
tabFragmentPagerAdapter = new TabFragmentPagerAdapter(getContext(), getChildFragmentManager(),                list_fragment, list_title, viewPager, (TabLayout) view.findViewById(R.id.tablayout)) {        };        viewPager.setAdapter(tabFragmentPagerAdapter);

4.Fragment中放置多个Fragment,由栈管理跳转和返回:

public class LoginActivity extends BaseActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_login);        replaceFragment(R.id.framelayout,new  LoginRegisterFragment());    }}
public void replaceFragment(int framelayout_id, Fragment fragment) {        FragmentManager fragmentManager = getSupportFragmentManager();        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();        fragmentTransaction.replace(framelayout_id, fragment).commitAllowingStateLoss();    }

Fragment跳转Fragment:

startFragment(R.id.framelayout, new FindPwdFragment());
   public void startFragment(int framelayout_id, Fragment fragment) {        FragmentTransaction fragmentTransaction = myActivity.getSupportFragmentManager().beginTransaction();        fragmentTransaction.setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out);        fragmentTransaction.replace(framelayout_id, fragment).addToBackStack(null).commit();    }

启动了多个Fragment后,需要根据栈返回:

 public void popupFragment() {        if (myActivity.getSupportFragmentManager().getBackStackEntryCount() == 0) {            finishActivity();            return;        }        myActivity.getSupportFragmentManager().popBackStack();    }

参考:Android架构

原创粉丝点击