android fragment 教程,Android Fragment教程总结

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

Fragment是什么就没有必要说了,但是要强调Fragment是Android3.0(11)后引入的如果要在2点几的Android设备上用那必需导入v4包。fragment在布局里面首字母是小写的有一次把他搞成大写的怎么也搞不出提示来[注意]:现在的APP技持的是API17以上的所以没必要考虑直接导入android.app.Fragment就可以了。4.0系统的平板模拟器好像存在bug。[强调]如果fragment调用了replace()方法那,这个fragment的生命周期是onPause(),onStop和onDestoryView(),如果没有调用addToBackStack(),此时的fragment还要进入销毁状态,onDestroy()和onDetach()方法也会得到执行。当返回的时候会执行onActivityCreated(),onStart(),onResumed()。onCreated()和onCreateView()没有被执行,因为视图被移出了但没有销毁。

Fragment的生命周期与Activity是息息相关假如Activity处于暂停状态Fragment也处于暂停状态的先上一张图

0904fragment_lifecycle.jpg

生命周期描述onAttach()当碎片和活动建立关联的时候调用

onCreateView()为碎片创建视图时调用

onActivityCreated()确保与碎片相关的活动一定已经创建完毕的时候调用

onDestroyView()当与碎片关联的视图被移除的时候调用,remove方法也算

onDetach()当碎片与活动解除关联的时候调用

静态加载碎片

静态加载布局很简单但是有些还是要注意了,这里在代码里标明了。但是强调写name的时候要把包名加上

public class LeftFragment extends Fragment{

//inflater参数和false

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.frg_left,container,false);

return view;

// return super.onCreateView(inflater, container, savedInstanceState); // 注意一下==============

}

}

0905staticfrag.png

动态加载碎片

动态加载碎片也很简单一般我们用FrameLayout把位置占好,然后用fragment替换就好了。但是这样的话按Back直接就退出了我们可以填加addToBackStack()。模拟Activity的返回栈。返回上一个Fragment。

public void nihao(View view){

LeftFragment fragment = new LeftFragment(); //fragment对象

FragmentManager manager = getFragmentManager();

FragmentTransaction transaction = manager.beginTransaction(); //开启事务

transaction.replace(R.id.fl,fragment,"lf_frag"); //第一个参数是FramLayout,第三个参数是标记方便查找

//manager.findFragmentByTag("lf_frag"); //注意

transaction.addToBackStack(null); //用事务的方法加入栈中,参数用于描述栈的状态,一般传入null

transaction.commit();

}

碎片与活动之间通信

碎片与活动之间通信比较简单,在活动中得到碎片的方法是getFragmentManager().findFragmentById(R.id.right_fragment);然后调用碎片中的方法。从而得到碎片中的数据。在碎片中调用活动中的方法通过(MainActivity)getActivity();碎片与碎片之间通信复杂一点在一个fragment中得到activity(activity里面写一些属性和set,get方法属性用来保存数据)然后第二个activity通过get得到值。

google也提供了另外一种方法通过setArguments();要给哪个Fragment里面传递数据直接得到他的实例通过事务设置arguments就可以了。

InvoiceInfoFrag invoiceInfoFrag = new InvoiceInfoFrag();

FragmentManager manager = getFragmentManager();

FragmentTransaction transaction = manager.beginTransaction();

Bundle bundle = new Bundle();

bundle.putString("tax_type", "45");

bundle.putString("code", code);

bundle.putString("number", num);

invoiceInfoFrag.setArguments(bundle); //传入参数

transaction.replace(R.id.act_public_item_main_fragment, invoiceInfoFrag).addToBackStack(null);

transaction.commit();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值