zoukankan      html  css  js  c++  java
  • 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");
  • 相关阅读:
    Java面试之最常见的十道面试题(超经典)
    hdu 3939(勾股+容斥)
    poj 1845 (逆元 + 约数和)
    hdu 5607 BestCoder Round #68 (矩阵快速幂)
    中国剩余定理
    Math
    (⊙o⊙)…
    lucas定理
    hdu 5600 BestCoder Round #67 (div.2)
    hdu5601 BestCoder Round #67 (div.2)
  • 原文地址:https://www.cnblogs.com/vijay/p/3533402.html
Copyright © 2011-2022 走看看