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");
  • 相关阅读:
    Android游戏开发22:Android动画的实现J2me游戏类库用于Android开发
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
    使用OGR创建dxf格式矢量数据
    mysql 数据库引擎 MyISAM InnoDB 大比拼 区别
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
    mysql 更改数据库引擎
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
    android 数字键盘使用
    MySQL Innodb数据库性能实践
    eclipse : Error while performing database login with the driver null
  • 原文地址:https://www.cnblogs.com/vijay/p/3533402.html
Copyright © 2011-2022 走看看