第一行代码笔记 (fragment)碎片的使用
来源:互联网 发布:微博淘宝网页链接 编辑:程序博客网 时间:2024/04/26 10:22
碎片的生命周期
1.运行状态:可见,并且能交互
2.暂停状态:可见,不能交互
3.停止状态:不可见,很可能被系统回收。(出现的情况:1.activity进入停止状态。2.在通过调用remove/repalce方法将碎片从活动中移除,但在commit之前调用了addToBackStack)
4.销毁状态:不可见 (出现情况:activity被销毁时,或调用remove/repalce方法将碎片从活动中移除,但在commit之前没有调用addToBackStack。)
使用
方法一:直接写在xml文件中
1.定义fragment的布局名为:left_layout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="leftFragment" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>2.在定义的fragment里面引用布局
3.定义一个activtypublic class LeftFragment extends Fragment { /** * 当碎片和activity建立关联的时候 * @param context */ @Override public void onAttach(Context context) { super.onAttach(context); } /** * 当碎片创建试图时(加载布局的时候调用) * @param inflater * @param container * @param savedInstanceState * @return */ @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.left_layout, container, false); return view; } /** * 确保与碎片相关的activity一定已经创建完毕的时候调用 * @param savedInstanceState */ @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } /** * 当碎片关联的试图被移除的时候调用 */ @Override public void onDestroyView() { super.onDestroyView(); } /** * 当碎片和activity解除关联的时候调用 */ @Override public void onDetach() { super.onDetach(); } /** * 防止被系统回收存储一些数据,通过bundle存储下来。可以在onCreateView()或者 * onActivityCreated()或者onCreat的bundle中取到值。 * @param outState */ @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); }}
public class FragmentActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment); }}4.在activty的xml布局中引用fragment
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.lvyequeen.test.day01.fragment.FragmentActivity"> <fragment android:name="com.lvyequeen.test.day01.fragment.LeftFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /></LinearLayout>
方法二:动态添加碎片
1.像上面一样简单创建两个fragment 名为:RightFragment 和 AnotherFragment
2.创建一个activty
public class FragmentActivity extends AppCompatActivity implements View.OnClickListener { private Button leftButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment); initView(); repalceFragment(new RightFragment()); } private void initView() { leftButton = ((Button) findViewById(R.id.leftButton)); leftButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.leftButton: repalceFragment(new AnotherFragment()); getFragment(); break; } } /** * 替换fragment * * @param fragment */ private void repalceFragment(Fragment fragment) {// 获取FragmentManager FragmentManager manager = getSupportFragmentManager(); manager.findFragmentById(R.id.right_Layout);// 开启一个事物 FragmentTransaction transaction = manager.beginTransaction();// 向容器内添加或替换碎片,一般用replace 参数1:传入容器的id,参数2:待添加的fragment实例 transaction.replace(R.id.right_Layout, fragment);// 在碎片中模拟返回栈,点击回退键回到上一个fragment transaction.addToBackStack(null);// 提交事物 transaction.commit(); } /** * 获取fragment的实例 */ private void getFragment() { // 获取FragmentManager FragmentManager manager = getSupportFragmentManager();// 获取fragment的实例 RightFragment rightFragment = (RightFragment) manager.findFragmentById(R.id.right_Layout); rightFragment.testContectWithActivity(); }}3.布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.lvyequeen.test.day01.fragment.FragmentActivity"> <fragment android:name="com.lvyequeen.test.day01.fragment.LeftFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <FrameLayout android:id="@+id/right_Layout" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /></LinearLayout>
三 动态加载布局的技巧(区分平板和手机)
1.使用限定符
在res文件夹下创建一个layout-large文件夹写一个和activity引用原先layout文件一样名称的xml布局。屏幕被认为是large的设备就会加载layout-large文件夹里面的文件。
2.使用最小宽度限定符
在res文件夹下创建一个layout-sw600dp文件夹。和上面一样。当程序运行在屏幕宽度大于600dp的设备上时加载layout-sw600dp里的布局,小于时,加载默认layout里面的布局。
使用注意事项
点击打开链接
0 0
- 第一行代码笔记 (fragment)碎片的使用
- 碎片(Fragment)--《第一行代码Android》笔记
- 第一行代码-Fragment碎片
- 第一行代码之fragment碎片
- 第一行代码笔记6(Fragment)
- Android Fragment的使用 《第一行代码》
- 入门Android开发--第一行代码--笔记系列(Fragment)
- 第一行代码笔记1:Fragment
- 第一行代码笔记之三Fragment
- 《第一行代码》Fragment学习笔记
- 第一行代码笔记,第四章-------探究碎片
- 第一行代码(四)Fragment
- 阅读郭林《第一行代码》的笔记——第4章 手机平板要兼顾,探究碎片
- Fragment碎片的使用
- Fragment 碎片的使用
- 《第一行代码》读书笔记(四)----碎片
- 《第一行代码--Android》读书笔记之碎片
- 第一行代码笔记,第八章-----多媒体的使用
- STM32更换晶振后没及时修改定时器参数,导致运算出错
- Hibernate4-4 对象关系映射文件
- 自己动手系列——实现一个简单的LinkedLis
- 使用git命令行进行项目合并
- 【Java集合系列】---总体框架
- 第一行代码笔记 (fragment)碎片的使用
- leetcode412
- 算法训练 安慰奶牛
- Matlab | mex混编多个cpp文件
- Android 事件分发机制
- Scanner的enter和空格作为结束符号的问题
- MVCPager 分页: 异步和同步Demo
- 在Linux中如何利用backtrace信息解决问题
- C 语言中 auto/static/register/extern 的区别