zoukankan      html  css  js  c++  java
  • 初探碎片

    解决android studio中使用碎片后,平板预览出错问题

    预览出错预览出错
    解决办法:
    在左右fragment各加tools:layout="@layout/left_fragment"

    问题地址,点进去后记得顶这个问题!
    显示正常了:
    显示显示

    其中,使用碎片的顺序应该是,写的方向则相反:

    1
    fragment->碎片类: 调用该类
    碎片类->布局: 加载该布局

    动态添加碎片

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //新建碎片类实例
    anotherFragment anotherFragment = new anotherFragment();
    //碎片管理器
    android.app.FragmentManager fragmentManager = getFragmentManager();
    //用碎片管理器开启事务
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    //替换前者容器中的碎片实例,从这里可以看出,在布局文件<fragment name="...">,实际上是创建了该碎片类的实例
    transaction.replace(R.id.right_container,anotherFragment);
    //提交事务
    transaction.commit();

    动态添加碎片实则是在一个容器中(此例为FrameLayout)将一个碎片(实例)替换成另一个碎片(实例)

    在碎片中模拟返回栈

    在事务(transaction)被commit前,添加transaction.addToBackStack(null),按Back键可以返回事务前的状态

    从布局文件获取碎片实例,接着就可以调用碎片的方法:

    1
    LeftFragment leftfrag = (LeftFragment) getFragmentManager().findFragmentById(R.id.left_frag);

    碎片中调用活动的方法:
    因为:活动)(1)<–绑定–>布局<–包含–>碎片->对应碎片类->在碎片类里面通过getActivity()获取相关联活动(1)

    碎片的生命周期

    • 若有在事务提交前 addToBackStack,那么起初的碎片会onPause->onStop->onDestroyView,按Back键会重新加载该碎片 onActivityCreated->onStart->onResume(没有onCreateView,原因是借助addToBackStack使得先前碎片的实例和视图得以保存)
    • 反之,在碎片被替换后,onDestroyView->onDestroy->onDetach

    preview无法显示

    previewpreview

    问题的解答

    大致意思是,只要你代码写的对,真实运行的是时候就不会出错,忽略这个问题即可。我想会不会和上面的那个问题有关,加上tools:layout="@layout/left_fragment"果然正确显示出来了

    其实,可以推理出,tools:layout="@layout/left_fragment"不过是用了来自xmlns:tools="http://schemas.android.com/tools"的工具,你不加,无非无法预览而已,该运行的还是运行起走

  • 相关阅读:
    传中文参数问题
    关于showModalDialog()弹出窗口.更改了页面的数据,再次点击页面却没有刷新
    ListView 中的一个低级 BUG
    Oracle SQLCODE/SQLERRM
    IE框架中访问不同域的网页遇到的问题
    JS代码收藏大全
    2006年终总结
    看来,你想成为一名DBA……
    将ViewState持久化保持在服务器端
    oraclemerge用法详解
  • 原文地址:https://www.cnblogs.com/gabygoole/p/5299861.html
Copyright © 2011-2022 走看看