为了账号安全,请及时绑定邮箱和手机立即绑定

Fragment

标签:
Android

1、Fragment的简单使用

        <1>Fragment:在Activity中使用的碎片,有自己的布局、生命周期和输入事件

        <2>使用Fragment的步骤

                (1)创建类,并继承Fragment;

public class FirstFragment extends Fragment{}

                (2)重写Fragment的onCreateView()生命周期方法,并返回一个View;

@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,			Bundle savedInstanceState) {		// TODO 加载fragment视图(两种方法,推荐使用第二种)		//View view = inflater.inflate(R.layout.first_fragment, null);				View  view2 = inflater.inflate(R.layout.first_fragment, container, false);				TextView textView = (TextView) view2.findViewById(R.id.textView);				//返回加载的视图对象		return view2;

                (3)使用fragment的两种方法

                        a.在布局文件中使用<fragment android:name="自定义Fragment的类路径"/>保证碎片显示唯一:id/tag

<fragment         android:id="@+id/firstFragment"        android:layout_width="match_parent"        android:layout_height="150dp"        android:layout_below="@id/tv"        android:name="com.qf.day12demo01.FirstFragment"        />

                        b.动态添加

                                1.获取到一个fragment管理器对象

FragmentManager manager = getFragmentManager();

                                2.通过这个管理器对象要开启一个事务

FragmentTransaction transaction = manager.beginTransaction();

                                3.把预留在布局中的位置,换成要展示的碎片对象

transaction.replace(R.id.replaceId, new SecondFragment());

                                4.提交事务      

transaction.commit();

          <3>使用FragmentManager

                (1)作用:管理多个Fragment之间的交互和传值

                (2)Activity.getFragmentManger()         3.0以后

                (3)FragmentActivity.getSupportFragmentManager() 3.0以前,引用v4包

                (4)FragmentTransaction beginTransaction() 获取Fragment事务处理对象

        <4>s使用FragmentTransaction

                (1)replace(int containerViewId, Fragment fragment)    把预留在布局中的位置,换成要展示的碎片对象

                (2)commit()     提交本次事务处理

3、Fragment的生命周期

        <1>11个生命周期方法

                (1)onAttach(Activity)  连接宿主Activity

                (2)onCreate(Bundle)  创建Fragment

                (3)onCreateView(LayoutInflater, ViewGroup, Bundle)创建Fragment视图

                (4)onActivityCreated(Bundle) 当宿主Activity的onCreate()执行完之后调用

                (5)onStart() 

                (6)onResume() 

                (7)onPause()

                (8)onStop() 

                (9)onDestroyView() 销毁Fragment视图,与onCreateView对应

                (10)onDestroy()  销毁Fragment,与onCreate对应

                (11)onDetach() 与宿主Activity断开连接,与onAttach对应

        <2>生命周期流程

                (1)当Activity创建时,调用Fragment的onAttach->onCreate->onCreateView->onActivityCreated

                (2)当Activity启动时,调用Fragment的onStart

                (3)当Activity获取焦点时,调用Fragment的onResume

                (4)当跳转到另一个Activity时,调用Fragment的onPause-->onStop

                (5)当返回Activity时,调用Fragment的onStart->onResume

                (6)销毁Activity时,调用Fragment的onDestroyView->onDestory->onDettach

3、Fragment与Activity之间的传值

        <1>Activity-->Fragment

                (1)在activity中添加碎片的时候,通过碎片对象的.setArgments(bundle)

public void btnSendMsg(View view){		TextView tv_top = (TextView) findViewById(R.id.tv_top);		tv_top.setText(content+new Date());		FragmentTransaction transaction = manager.beginTransaction();		bottomFragment = new BottomFragment();		Bundle bundle = new Bundle();		bundle.putString("msg", content+new Date());		//把碎片对象和要传递的数据绑定		bottomFragment.setArguments(bundle);		transaction.replace(R.id.replaceId, bottomFragment);//替换的碎片对象中是绑定有数据的		transaction.commit();	}

                (2)在fragment里面,通过getArgments();得到一个bundle对象,再从bundle对象里面获取内容

		Bundle bundle = getArguments();		if (bundle != null) {			String msg = bundle.getString("msg");			tv_bottom.setText(msg);		}

        <2>Fragment-->Activity

                (1)在activity中声明一个公共的方法,在这个方法中必须要有一个参数(参数类型就是要传递的数据类型)

public void setContent(String s){		tv_main.setText(s);	}

                (2)在fragment里面,通过getActivity(),可以获取到宿主activity对象,再调用宿主对象中到提供的公共方法,把数据传递在这个方法中

@Override	public void onClick(View v) {		// TODO 向宿主activity传值				//获取到当前碎片所在的宿主activity对象		MainActivity activity = (MainActivity) getActivity();		activity.setContent(content+new Date());			}

                (3)Activity方式

                        1.在Activity中获取Fragment中的UI控件,并增加相关事件

                        2.在Activity声明公共方法,在Fragment中调用getActivity()并强转,则可以调用公共方法向其他Fragment控件传值

                        3.获取assests下的文件流      InputStream is = getResources().getAssets().open("day01.txt");

原文链接:http://www.apkbus.com/blog-815579-61232.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消