第5章:手机平板要兼顾,探究Fragment(笔记)


5.1 Fragment是什么

	迷你型的Activity。
	
	
5.2 Fragment的使用方式

5.2.1 Fragment的简单用法
	
	第一步:创建一个左,右Fragment。
	
	第二步:在主Activity的layout的布局中,添加Fragment,代码如下。
	
	<fragment
        android:id="@+id/leftFrag"
        android:name="com.example.fragment_test.left_Fragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <fragment
        android:id="@+id/rigthFrag"
        android:name="com.example.fragment_test.right_Fragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
		
	
5.2.2 动态添加Fragment
	
	第一步:创建一个新的another_right_fragment。
	
	第二步:修改主Activity的布局代码如下。
	<fragment
        android:id="@+id/leftFrag"
        android:name="com.example.fragment_test.left_Fragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <FrameLayout
        android:id="@+id/rigthFrameLayout"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
		
	第三步:修改主Activity的代码如下。
	override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button_left_1.setOnClickListener {
            replaceFragment(another_right_Fragment())
        }
        replaceFragment(right_Fragment())
    }
    private fun replaceFragment(fragment: Fragment){
        val fragmentManager = supportFragmentManager
        val transaction = fragmentManager.beginTransaction()
        transaction.replace(R.id.rigthFrameLayout, fragment)
        transaction.commit()
    }
	
	效果:点击左边的按钮,动态添加Fragment。
	
5.2.3 在Fragment中实现返回栈

	
	使用Back键,可以返回,添加如下代码。
	    transaction.replace(R.id.rigthFrameLayout, fragment)
        transaction.addToBackStack(null)  // null这个参数描述返回栈的状态
        transaction.commit()
		
		
5.2.4 Fragment和Activity的交互

	# 在一个Fragment中调用另一个Fragment的数据
	
	第一步:Activity中添加如下代码:
	val fragment = leftFrag as left_Fragment	# leftFrag 是主Activity布局文件中的<fragment>名称,left_Fragment是fragment类名
	第二步:在另一个fragment的类中,添加如下代码,获取如下另一个fragment的数据。
	requireActivity().leftFrag.button_left_1.text.toString()
	
	# requireActivity()函数源码 (源码就是java,不是kotlin,难道为了省事?)
	public final FragmentActivity requireActivity() {
        FragmentActivity activity = getActivity();
        if (activity == null) {
            throw new IllegalStateException("Fragment " + this + " not attached to an activity.");
        }
        return activity;
    }

	
5.3 生命周期

5.3.1 Fragment的状态和回调

	# 状态
	
	1, 运行状态
	
	2, 暂停状态
	
	3, 停止状态
		与Activity不同的是,FragmentTransaction的romove(),replace方法将Fragment从Activity中移除,
		如果调用了addToBackStack()方法,Fragment会进入停止状态。
	
	4, 销毁状态
	
	
	# 回调方法
	
	onAttach():关联Activity,调用
	
	onCreateView():创建视图调用
	
	onActivityCreated():确保关联的Activity创建完毕时调用。
	
	onDestoryView():当onCreateView()创建的视图被移除调用。
	
	onDetach():当onAttach()关联的Activity解除关联调用。
	
	
5.3.2 体验Fragment的生命周期
	
	https://blog.csdn.net/pkorochi/article/details/102478538?ops_request_misc=&request_id=&biz_id=102&utm_term=%E4%BD%93%E9%AA%8CFragment%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-102478538.142^v58^pc_search_tree,201^v3^control_2&spm=1018.2226.3001.4187

5.4 动态加载布局的技巧

5.4.1 使用限定符

	例如新建一个供大屏幕使用的layout布局:
	(project项目视图下)右击res,点击 new -->  android resource directory,
	然后,选择你的 Resource type,  以及需要限定的类型,如,屏幕大小,横向,竖向等等,表示在这个情况下使用。
	
5.4.2 使用最小限定符
	
	Available qualifilers(激活限定符): 选择Smallest Screen Width(基于最小宽度限定符)。

5.5 Fragment的最佳实践:一个简易版的新闻应用

	具体看www.ituring.com.cn/book/2744网站,下载好,在第5章的项目。

	个人见解:利用sw600dp,分开,手机和平板Layout,手机,使用二个Activity,
	平板使用一个Acitivity,二个Fragmnet, 在新闻标题的列表中的点击事件中,进行区分,是刷新Fragment(平板),还是启动Activity(手机)。






	

	
	
	
	

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值