[android studio]Android fragment使用方法与注意事项

更新时间:2019-11-20    来源:php应用    手机版     字体:

【www.bbyears.com--php应用】

1、使用支持库

 

如果您的应用需要运行在3.0及以上的版本,可以忽略这部分内容。

 

如果您的应用使用在3.0以下、1.6及以上的版本,需要使用支持库来构建。

 

使用支持库的步骤:

 



    使用SDK下的SDK Manager工具下载Android Support Package

     2. 在您的Android工程的顶级目录下创建一个libs目录
    3. 找到您的SDK下的/extras/android/support/v4/android-support-v4.jar,并且拷贝到您的项目的libs下,选中这个jar包 → 右键 → Build Path → Add to Build Path
    4.在您的项目的Manifest.xml文件的标签下添加:
    <uses-sdkandroid:minSdkVersion="4"
      android:targetSdkVersion="8"/>
      其中targetSdkVersion是您的软件最小支持的版本
    5.如果您的项目支持3.0以下的版本,请导入如下的包:android.support.v4.*;
    在使用Fragment的Activity请继承FragmentActivity而不是Activity。如果您的系统是3.0或以上版本,同样需要导入类似的包,但是可以使用普通的Activity。 
      
    2、创建一个Fragment
    Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等。可以看做是一个子Activity。
    创建一个Fragment
    创建一个Fragment和创建一个Activity很类似,继承Fragment类,重写生命周期方法,主要的不同之处就是需要重写一个onCreateView()方法来返回这个Fragment的布局。例子:
     

      
    Fragment的生命周期方法依赖于Activity的生命周期,例如一个Activity的onPause()的生命周期方法被调用的时候这个Activity中的所有的Fragment的onPause()方法也将被调用。
     
    更多的内容请参照类Fragment。
    使用XML添加FragmentActivity
    尽管Fragment可以被多个Activity重用,但是您也必须把Fragment关联到一个FragmentActivity上。可以使用XML布局文件的方式来实现这种关联。
    说明:上面的所说的FragmentActivity适用在API在3.0以下的版本,3.0及以上的版本可以使用普通的Activity。
    例子:

      
    上面使用fragment标签,android:name=””指定一个添加到xml中的Fragment。对于创建不同的屏幕尺寸布局的更多信息,请阅读支持不同的屏幕尺寸。
     

     
      
    当您添加一个片段一个活动布局定义的布局XML文件中的片段,你不能删除在运行时的片段。如果您打算在用户交互和交换片段,你必须添加的活性片段的活动时第一次启动。
     
    3、构建一个灵活的UI
     
    FragmentManager提供了对Activity运行时的Fragment的添加、删除、替换的操作。
     
    在Activity运行期间你可以添加Fragment而不是在XML布局文件中进行定义。如果你打算在Activity中改变Fragment的生命过程。
     
    如果要执行添加、删除、修改的操作,你必须通过FragmentManager的对象获得一个FragmentTransaction对象,通过它的API来执行这些操作。
     
    添加一个Fragment到一个Activity,必须把这个Fragment添加到一个容器视图中。例子:

     
    在Activity中你可以通过getFragmentManager()来获得Fragment对象,然后通过FragmentManager对象的beginFragmentTransaction()方法来获得FragmentTransaction对象。通过它的add()方法来添加一个Fragment到当前的Activity中。
    一个FragmentTransaction对象可以执行多个增删修的方法,如果你想把这些修改提交到Activity上,必须在最后调用一下这个对象的commit()方法。例子:

     

      
    由于不是定义在XML布局中的,所有可以转型删除和修改的操作。
    如果替换或者删除一个Fragment然后让用户可以导航到上一个Fragment,你必须在调用commit()方法之前调用addToBackStack()方法添加到回退栈。如果你把这个Fragment添加到了回退栈,在提交之后这个Fragment是会被Stop而不是Destroyed。如果用户导航到这个Fragment,这个Fragment会被Restart而不是重新创建。如果你没有把它添加到回退栈,则在删除或者替换的时候它将被Destroyed。例子:

      
    4、与其他Fragment的交互
    两个单独的Fragment之间是不应该进行通信的。应该使用他们所存在的Activity作为沟通的纽带。
    为了实现两个Fragment的交互,您可以在Fragment中定义一个接口,然后再这个接口中定义一个方法,在Fragment的onAttach()方法中调用这个接口中的方法。然后让Activity实现这个方法来完成Activity和Fragment之间的通信。例子:
    定义接口并调用方法:
     

      
    实现接口,在这个方法中可以进行与其他Fragment的数据的交互:

      
    可以通过FragmentManager的findFragmentById()来查找一个Fragment。

     

     

    fragment使用注意

    在讲这之前呢,需要讲一下,fragment布局的原理,fragment 布局叫做层布局,是一层覆盖一层的。当一个布局里面需要多个fragment 布局嵌套的时候。就会遇到这种难过情况,你会发现两个fragment 的内容重叠到一块了。如果页面里面有按纽的话,你会发现点的第一个页面的按钮。但是第二个页面里的按钮点击事件也被触发了。

    这是昨天遇到的情况,下面就讲一下解决办发,首先你要找到你的fragment 的布局文件。

               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="@color/white"
               android:clickable="true"
               android:orientation="vertical" >
     
                   android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_marginTop="20dp" >
     
                     android:id="@+id/iv_center_head"
              android:layout_width="50dp"
              android:layout_height="50dp"
              android:layout_marginLeft="10dp"
              android:background="@drawable/ic_launcher" />
     
                     android:id="@+id/tv_center_shop_name"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginTop="9dp"
              android:layout_toRightOf="@+id/iv_center_head"
              android:text="asd"
               android:textSize="14sp" />
       

    这是一个布局文件,准确的说是fragment 布局文件,需要注意的是:


    android:background="@color/white"
    android:clickable="true"

    这两句代码就表示,为fragment 设置背景,以防两个fragment 布局文件重叠,内容错乱出现。 第二行代码则防止  点击穿透的。还有最后不推荐使用多个fragment 重复使用。

本文来源:http://www.bbyears.com/jiaocheng/80297.html

热门标签

更多>>

本类排行