开发中尽量用fragment代替activity来完成跳转,那么如何用fragment来替换activity来替换呢???
来源:互联网 发布:odi 绿地 并购 数据 编辑:程序博客网 时间:2024/04/28 00:56
1、只有fragment使用butterknife的时候的butterknife.bind(this,view),其他的都是butterknife.bind(this),包括自定义控件的基础view或者是继承viewgroup。并且也只有fragment需要解绑。
绑定:Unbinder unbinder = ButterKnife.bind(this, view);
解绑:
@Override
public void onDestroyView() {
super.onDestroyView(); unbinder.unbind();}2、我们尽量开发一个app只用两个左右的activity,一个是一开始就存在的mainActivity,另外一个activity是当做一个容器,当点击mainActivity里面的任何点击事件需要跳转界面的时候都跳转到另外一个activity里面,然后在另外一个fragment里面(也就是另外一个activity里面)做你想做的任何操作。如果另外一个fragment里面也有跳转事件的话,就replace掉自己,但是仍然是在本身的这个容器activity里面,然后返回的时候就弹栈,最后一个返回到mainActivity的时候就不是弹栈了,是关闭这个容器activity,当mainActivity又有点击事件跳转界面的时候再开启。这样会节省喝多性能,流畅很多。你也可以对replace的fragment做一些进场和出场动画来满足自己的需求。3、下面就是那个容器activiypublic class FragmentActivity extends AppCompatActivity { private static FragmentManager fragmentManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment); Class<Fragment> fragmentClass = (Class<Fragment>) getIntent().getSerializableExtra("fragment"); Bundle bundle = getIntent().getExtras(); try { Fragment fragment = (Fragment) fragmentClass.newInstance(); if (bundle != null) { fragment.setArguments(bundle); } fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.fragment_container, fragment) .commit(); } catch (Exception e) { e.printStackTrace(); } } public static void startActivity(Context context, Class<? extends Fragment> fragment) { startActivity(context, fragment, null); } public static void startActivity(Context context, Class<? extends Fragment> fragment, Bundle bundle) { Intent intent = new Intent(context, FragmentActivity.class); intent.putExtra("fragment", fragment); if (bundle != null) { intent.putExtras(bundle); } context.startActivity(intent); }}4、从mainActivity跳转到容器activity方法:FragmentActivity.startActivity(getActivity(), TestFragment.class);5、如果是在容器activity里面的fragment需要执行其他跳转操作(不是跳转到mainActivity)的话就用进栈:FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.setCustomAnimations( R.animator.slide_in_right, R.animator.slide_out_left, R.a nimator.slide_in_right, R.animator.slide_out_left); transaction.replace(R.id.fragment_container, new TestFragment()) .addToBackStack(null) .commit();退出的话(不是退出到mainActivity)就实行弹栈:getFragmentManager().popBackStack();
如果是退出到mainActivity的话就关闭这个容器activity:
getActivity().finish();
6、如果你想从一个fragment传递数据到另一个fragment的话就在进栈的时候,传递一个bundler进去,分两种情况:(1)是从mainActivity的fragment传递到容器的fragment,那么就需要在你启动容器Activity的时候传递一个bundler进去,也就是构造方法不一样而已,7.拿出从别的fragment传过来的值,在onCreate里面拿:FragmentActivity.startActivity(getActivity(), SettingFragment.class,bundle);(2)如果是在容器activity里面fragment之间的数据传递的话,就把bundle直接设置到要启动的fragment里面去:
FragmentTransaction transaction = getFragmentManager().beginTransaction();Bundle bundle = new Bundle();bundle.putString("data","123");TestFragment testFragment= new TestFragment ();drawWithFragment.setArguments(bundle);transaction.replace(R.id.fragment_container, testFragment).addToBackStack(null).commit();@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = getArguments(); String data = (String) bundle.get("data");}8、为了代码的规范,在fragment的OnCrateView里面只进行butterknife的初始化和布局的初始化,像什么initData之类的操作都放在onViewCreate里面进行。不要问我为什么,,我上一家公司是这样要求的。。。
0 0
- 开发中尽量用fragment代替activity来完成跳转,那么如何用fragment来替换activity来替换呢???
- FragmentTransaction管理 Activity中 fragment的替换
- Fragment向另一个Fragment进行传值通过Activity来传递在同一个Activity中
- 管理Activity和Fragment(通过Stack<?>来进行管理)
- 使用GestureDetector来实现activity或者是fragment的翻页
- 使用Fragment代替Activity
- 用itextpdf生成水印来代替pdf的替换问题
- 实现Fragment替换,跳转
- 用Fragment来代替过期的Tabhost和ActivityGroup
- 如何用ObjectContext来完成事务
- Activity跳转Fragment跳转Fragment跳转Fragment跳回Activity
- Asp.net是快速开发的代名词, 那么如何用Asp.net来实现 RIA, 高性能, 同时又不过份的失于快速开发呢?
- Fragment跳转到Activity
- Activity 跳转到 Fragment
- Activity 跳转 Fragment
- activity跳转到fragment
- activity和fragment跳转
- Activity如何跳转Fragment
- Retrofit+okhttp网络框架介绍
- CAN/RS485隔离收发模块在直流充电桩上的应用
- 模拟时钟
- 杭电oj编码2021
- GnuPG教程(一)-CLI
- 开发中尽量用fragment代替activity来完成跳转,那么如何用fragment来替换activity来替换呢???
- springMVC笔记
- leetcode(4) - Median of Two Sorted Arrays
- 处理tcp粘包问题
- docker容器资源配额控制
- STL学习1——简介
- 使用next-key locks 用于搜索和索引扫描,可以防止幻读
- 支持向量机的近邻理解:图像二分类为例(2)
- java基础3