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架构
阅读全文
0 0
- Android架构之Activity和Fragment复杂嵌套
- Android进阶之Fragment和Activity之间通过setArguments传递复杂参数
- Android Activity和Fragment
- android Fragment和Activity
- Android Fragment 和 Activity
- Android Fragment和Activity
- **ANDROID** activity和Fragment
- Android Fragment和Activity
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android 之 activity 和 controller 架构设计
- android Activity和fragment通信之activity向Fragment发送数据
- Android开发之Activity和Fragment生命周期对比图
- Android:activity,fragment和service之我见(准备更新)
- Android Fragment和Activity比较
- android - activity和fragment生命周期
- android 中fragment和activity
- java定时器-固定时间间隔内执行操作
- Sql- Group By ,having 分组查询
- ERROR TIMS-4236:“invalid value ‘20171024_02’ for bundle_version” at SoftwareAssets
- 无限轮播
- erlang 文件读写操作
- Android架构之Activity和Fragment复杂嵌套
- Linux中的中断处理机制
- LSTM模型理论总结
- TCP连接的状态详解以及故障排查
- cocos2dx-3.4环境搭建及apk发布调试之谜海归巢
- eclipse中给类制定注释模板
- Struts2---自定义拦截器
- JavaWeb学习心得之Tomcat服务器(一)
- 技术团队开发流程