zoukankan      html  css  js  c++  java
  • Android Fragment

    一、什么事Fragment

    Fragment是一种可以嵌入在Activity中的UI片段,它能让程序更加合理和充分的利用大屏幕空间,因而在平板和目前的大屏手机上应用的非常广泛。

       一个碎片在一个活动中代表一个行为或用户界面的一部分。你可以在一个单一的活动中组合使用多个碎片建立一个多窗格的UI,并且可以在多个活动中重用一个碎片。

       Activity的频繁创建和销毁比较消耗时间,使用Fragment可以避免这种情况。

       Fragment是轻量级的Activity:Fragment不需要再清单文件中注册。

     

    二、静态使用Fragment

       这是使用Fragment最简单的一种方式,吧Fragment当成普通的控件,直接写在Activity的布局文件中。

    1. 继承Fragment,重写onCreateView决定Fragment的布局
    2. 在Activity的布局中添加Fragment(与添加普通的控件类似)。此处必须指明Fragment代表的那个具体的Fragment类(class属性)。

       注意:Fragment的onCreateView必须实现,这个方法的返回视图决定了这个Fragment的显示视图。

    三、动态使用Fragment

        静态使用Fragment仅仅是Fragment最简单的功能而已。Fragment真正的强大之处在于可以动态的添加到Activity中,在程序运行时向Activity添加Fragment,程序的界面就可以定制的更加多样化。

    1. 创建Fragment类(如果相兼容3.0以下的版本,必须使用V4包中的)
    2. 使用Activity的getFragmentManager()获得FragmentManager对象(如果是V4包中的FragmentActivity,则调用getSupportFragmentManager()来获得FragmentManager对象)
    3. 获得事务对象:FragmentTransaction transaction = manager.beginTransaction();
    4. 调用事务的一系列方法:
      1. transaction.add(containerViewId , fragment ,tag);  //在指定的容器中添加Fragment
      2. transaction.remove(fragment);  //移除指定的fragment
      3. transaction.replace(containerViewId ,fragment ,tag);  //替换掉指定容器中的fragment,相当于先remove再add
    5. 如果想按下返回键之后能够回到替换前的状态,则可以把fragment添加到Back栈中。transaction.addToBackStack(name);
    6. 最后提交事务(这个必须做)。transaction.commit();  //只有这个方法执行之后上述动作才可以生效。

    四、Fragment与Activity之间传值

        4.1 分别获取到对方

    1. Fragment获取它的所在的Activity:调用Fragment的getActivity()方法,即可返回它所在的Activity
    2. Activity获取它包含的Fragment:调用Activity关联的FragmentManager的findFragmentById(int id) 或findFragmentByID(String tag)方法即可获取到指定的Fragment

      注意:id或tag都是在布局文件中使用<fragment.../>标签是指定的。

         4.2传递数据

    1. Activity向Fragment传递数据:在Activity中创建Bundle数据包,并调用Fragment对象的setArgument(Bundle bundle)方法即可将Bundle数据包传给Fragment。在Fragment中使用getArguments()方法来获得Activity传入的值。
    2. Fragment向Activity传递数据或Activity需要在Fragment运行中进行实时通信:在Fragment中定义一个内部回调接口,再让包含改Fragment的Activity实现回调接口,这样Fragment即可调用该毁掉方法将数据传递给Activity

    Fragment:

    android.app.Fragment

    public class LeftFragment extends Fragment{

     

    @Override

    public View onCreateView(LayoutInflater inflater,ViewGroup conainer,

    Buddle savedInstanceState){

    View view=inflater.inflate(R.layout.left_fragment,container,false);

    return view;

    }

    }

    这里重写了Fragment的onCreateView方法,然后在这个方法中通过LayoutInflater的inflate方法将定义的left_fragment布局动态加载进来

    FrameLayout布局,没有任何的定位方式,所有控件都摆放在左上角

     

    动态的添加碎片:

    1.创建待添加的碎片实例

    2.获取到FragmentManager,在活动中可直接调用getFragmentManager()方法得到

    3.开启一个事务,通过调用beginTransation()方法开启

    4.向容器内加入碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例

    5.提交事务,调用commit()方法完成

    RightFragment fragment=new RightFragment();

    FragmentManager fragmentManager=getFragmentManager();

    FragmentTransation transation=fragmentManager.beginTransation();

    transation.replace(R.id.left_layout,fragment);

    transation.commit();

     

    碎片和活动之间进行通信

    为了方便碎片和活动之间进行通信,FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例:

    RightFragment fragment=(RightFragment)getFragmentManager().findFragmentById(R.id.right_fragment);

     

    在碎片中调用活动里的方法:

    在每个碎片中都可以通过调用getActivity()方法来得到和当前碎片向关联的活动实例

    MainActivity activity=(MainActiviy)getActivity();

    碎片和碎片之间的通信:

    首先在一个碎片中得到一个和他相关连的活动,在通过这个活动去或阿奴另外一个碎片的实例

     

    android:padding表示给这个控件周围加上补白,不至于让文本内容紧靠在边缘上

    android:ellipise用于设定当文本内容超出控件宽度时,文本的缩略方式,指定为end表示在为不进行缩略

  • 相关阅读:
    Sublimit 3 注册码
    Flink sql 之 两阶段聚合与 TwoStageOptimizedAggregateRule(源码分析)
    IDM使用教程:利用IDM下载百度网盘文件
    Python调用Prometheus监控数据并计算
    Windows搭建Nginx+PHP+MySQL环境(图文详解)
    PHPstorm+XDebug+Chrome/Firefox超详细教程(图文)
    C# 教你怎么解决DateTime转unix时间戳出现的误差
    asp.net win IIS下cookie读取不区分大小写如何处理
    SQL 空格分隔的多个关键词模糊查询货品资料任一匹配和全部匹配 数据库实现方式
    TDBGrideh表头自动排序设置
  • 原文地址:https://www.cnblogs.com/chhom/p/5590450.html
Copyright © 2011-2022 走看看