• Android-----Fragment


    Fragment提供了把UI分解成不同组成部分的方法,从而使得每一个部分都能在其运行的设备上以正确的形式被展现。

    在手机上,列表视图会占据整个屏幕,点击一个列表项将会把用户带到新的屏幕以展示内容。但是在平板电脑上,列表视图只显示一部分,内容也会被同步展示。

    Fragment生命周期:
    1、onCreate
    回调函数:onAttach()第一次与Activity时调用
              onCreate()初始化Fragment
             onCreateView()创建Fragment的视图层级
              onActivityCreated()当Host活动已经完成了对其onCreate()调用之后才能调用
    2、onStart:当Fragment对于用户可见时调用
    3、onResume:
    4、onPause:
    5、onStop:
    6、onDestroy:
    和ListView一样,Fragment也有一个三部曲
    第一步:创建Fragment布局
    在XML布局方面,Fragment和Activity无差异
    第二步:加载Fragment布局
    public View onCreateView(LayoutInflater inflater,ViewGroup ontainer.Bundle savedInstanceState){
        View view = inflater.inflate(R.layout.news,container,true);
        return view;
    }
    第三步:在Activity中添加Fragment
    A、直接在布局文件中添加Fragment
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal">
        
        <fragment android:name="com.vijay.ListFragment"
            android:id="@+id/list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    </LinearLayout>
    B、在Activity运行时添加Fragment
    //实例化ListFragment的对象
    ListFragment listFragment = new ListFragment();
    //获得一个FragmentTransaction的实例
    FragmentTransation ft = getFragmentManager().beginTransaction();
    //添加一个显示详细内容的Fragment
    ft.add(android.R,id.content,listFragment).commit();
    //提交事务
    ft.commit();
    新知识点:
    1、Fragment事务
    由于在屏幕上可以一次展示多个Fragment,所以在不转换Activity的情况下添加和移除他们是可能的。要更改Ui中现有的Fragment,必须把他们封装到一个事物Transaction中。Fragment事务与数据库事务类似,对所有会影响到Fragment的操作进行批处理并会同时执行这些操作。
    操作如下:
    FragmentManager fm = getFragmentManager();
    FragmentTransation ft = fm.beginTransaction();
    ExampleFragment fragment = new ExampleFragment();
    ft.add(R.id.fragment_container,fragment);
    ft.commit();
    这里,一个新的Fragment被添加到UI上。
    同时,Fragment也可以通过他们的ID或者通过标签字符串来引用。
    fm.findFragmentById(R.id.frag);
    fm.findFragmentByTag("tag")
    注意:Fragment仅当Activity在回复状态时才可以从布局中被添加或者移除。
    2、Fragment回退栈
    Fragment fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ExampleFragment fragment = new ExampleFragment();
    ft.add(R.id.fragment_container,fragment);
    //takes a String name argument,not userd here
    ft.addToBackStack(null);
    ft.commit();
    3、保存Fragment状态
    Android3.2引入了另一个有意思的类:Fragment.SavedState
    Fragment之间的通信方式
    
    A、Fragment到Fragment直接通信
    FragmentOther fragOther = (FragmentOther)getFragmentManager().findFragmentByTag(
    "other");
    
    B、Fragment到目标Fragment的设置
    mCalledFragment = new CalledFragment();
    mCalledFragment.setTargetFragment(this,0);
    fm.beginTransaction().add(mCalledFragment,"work").commit();
    
    C、目标Fragment到Fragment的通信
    TextView tv =(TextView)getTargetFragment().getView().findViewById(R.id.text1);
    tv.setText("Set from the called fragment");
  • 相关阅读:
    xadmin修改list_export_fields不生效以及添加exclude_export_fields功能
    Python正则总结
    Ubuntu安装Gitlab简记
    pytest使用总结笔记
    unittest使用数据驱动ddt
    unittest使用总结
    HTTP知识点总结
    HTTPS加密流程理解
    Requests库使用总结
    leetcode 76:最小字符串
  • 原文地址:https://www.cnblogs.com/vijay/p/3533402.html
Copyright © 2020-2023  润新知