,,Android Fragment使用全解

,,Android Fragment使用全解

本文主要介绍Android Fragment使用的相关资料,帮助你更好的理解和学习使用Android开发。感兴趣的朋友可以了解一下。

目录

动态添加FragmentFragment生命周期的初步探索我们都知道Android上的界面展示是通过Activity来实现的,如此常用相信大家已经非常熟悉了,这里就不赘述了。

然而,活动也有其局限性。同样的界面在手机上可能好看,在平板上可能不好看,因为平板的屏幕很大,手机在平板上的界面可能拉伸太多,控件间距太大。这时候更好的体验效果是在活动中嵌入‘小活动’,然后每个‘小活动’都可以有自己的布局。所以,今天的主角片段在舞台上。

Fragment初探

为了让界面在平板上更好的显示,Android在3.0版本中引入了片段功能,这个功能非常类似于Activity,可以像Activity一样包含布局。片段通常嵌套在活动中使用。现在想象一下这个场景:有两个片段,片段1包含一个ListView,每行显示一本书的标题。片段2包括TextView和ImageView来显示书的详细内容和图片。

如果程序现在以纵向模式运行在平板电脑或手机上,片段1可能嵌入在一个活动中,而片段2可能嵌入在另一个活动中,如下图所示:

现在,如果程序在平板电脑上以横向模式运行,两个片段可以嵌入到同一个活动中,如下图所示:

可见使用Fragment可以让我们更充分的利用平板的屏幕空间。让我们一起来探讨如何使用Fragment。

首先需要说明的是,Fragment是3.0版本引入的。如果使用的是3.0之前的系统,需要导入android-support-v4的jar包,才能使用碎片功能。

创建一个名为Fragments的新项目,然后在布局文件夹下创建一个名为fragment1.xml的新布局文件:

linear layout xmlns:Android=' http://schemas . Android . com/apk/RES/Android '

Android:layout _ width=' match _ parent '

Android:layout _ height=' match _ parent '

android:background='#00ff00 '

文本视图

Android:layout _ width=' wrap _ content '

Android:layout _ height=' wrap _ content '

android:text='这是片段1 '

android:textColor='#000000 '

android:textSize='25sp' /

/线性布局

如您所见,这个布局文件非常简单,只添加了一个LinearLayout和一个TextView。让我们做同样的事情,创建一个新的fragment2.xml:

linear layout xmlns:Android=' http://schemas . Android . com/apk/RES/Android '

Android:layout _ width=' match _ parent '

Android:layout _ height=' match _ parent '

android:background='#ffff00 '

文本视图

Android:layout _ width=' wrap _ content '

Android:layout _ height=' wrap _ content '

android:text='这是片段2 '

android:textColor='#000000 '

android:textSize='25sp' /

/线性布局

然后创建一个新的类Fragment1,它继承自Fragment1:

公共类Fragment1扩展片段{

@覆盖

公共视图onCreateView(LayoutInflater inflater,ViewGroup容器,Bundle savedInstanceState) {

返回inflator . inflate(r . layout . fragment 1,container,false);

}

}

我们可以看到,这个类也很简单,主要是加载我们刚刚写的fragment1.xml布局文件并返回。同样,让我们编写片段2:

公共类Fragment2扩展片段{

@覆盖

公共视图onCreateView(LayoutInflater inflater,ViewGroup容器,Bundle savedInstanceState) {

返回inflator . inflate(r . layout . fragment 2,container,false);

}

}

然后,打开或创建一个新的Activity_main.xml作为主活动的布局文件,添加两个对片段的引用,并使用android:name前缀来引用特定的片段:

线性布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '

Android:layout _ width=' match _ parent '

Android:layout _ height=' match _ parent '

android:baselineAligned='false '

碎片

android:id='@ id/fragment1 '

Android:name=' com。举例。片段演示。片段1 '

android:layout_width='0dip '

Android:layout _ height=' match _ parent '

android:layout_weight='1' /

碎片

android:id='@ id/fragment2 '

Android:name=' com。举例。片段演示。片段2 '

android:layout_width='0dip '

Android:layout _ height=' match _ parent '

android:layout_weight='1' /

/线性布局

最后打开或新建主要活动作为程序的主活动,里面的代码非常简单,都是自动生成的:

公共类主要活动扩展活动{

@覆盖

受保护的void onCreate(Bundle saved instancestate){

超级棒。oncreate(savedInstanceState);

setContentView(r . layout。活动_主);

}

}

现在我们来运行一次程序,就会看到,一个活动很融洽地包含了两个片段,这两个碎片平分了整个屏幕,效果图如下:

动态添加Fragment

你已经学会了如何在可扩展标记语言中使用片段,但是这仅仅是碎片最简单的功能而已1000片段。真正的强大之处在于可以动态地添加到活动当中,因此这也是你必须要掌握的东西。当你学会了在程序运行时向活动添加片段,程序的界面就可以定制的更加多样化。下面我们立刻来看看,如何动态添加片段。

还是在上一节代码的基础上修改,打开activity_main.xml,将其中对碎片的引用都删除,只保留最外层的线性布局,并给它添加一个id,因为我们要动态添加片段,不用在可扩展标记语言里添加了,删除后代码如下:

线性布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '

android:id='@ id/main_layout '

Android:layout _ width=' match _ parent '

Android:layout _ height=' match _ parent '

android:baselineAligned='false '

/线性布局

然后打开主要活动,修改其中的代码如下所示:

公共类主要活动扩展活动{

@覆盖

受保护的void onCreate(Bundle saved instancestate){

超级棒。oncreate(savedInstanceState);

setContentView(r . layout。活动_主);

display display=getWindowManager().getDefaultDisplay();

如果(显示。getwidth()显示。getheight()){

片段1片段1=新片段1();

getFragmentManager().beginTransaction().替换(R.id.main_layout,fragment1).commit();

}否则{

片段2片段2=新片段2();

getFragmentManager().beginTransaction().替换(R.id.main_layout,fragment2).commit();

}

}

}

首先,我们要获取屏幕的宽度和高度,然后进行判断,如果屏幕宽度大于高度就添加片段1,如果高度大于宽度就添加碎片2 .动态添加碎片主要分为四步:

1.获取到碎片管理器,在活动中可以直接通过getFragmentManager得到。

2.开启一个事务,通过调用开始交易方法开启。

3.向容器内加入片段,一般使用替换方法实现,需要传入容器的身份证明(识别)和碎片的实例。

4.提交事务,调用犯罪方法提交。

现在运行一下程序,效果如下图所示:

如果你是在使用模拟器运行,按下ctrl F11切换到竖屏模式。效果如下图所示:

Fragment的生命周期

和活动一样,片段也有自己的生命周期,理解碎片的生命周期非常重要,我们通过代码的方式来瞧一瞧碎片的生命周期是什么样的:

公共类碎片1扩展片段{

public static final String TAG=" fragment 1 ";

@覆盖

公共视图oncreate view(LayoutInflater inflater,视图组容器,Bundle savedInstanceState) {

Log.d(标签,‘oncreate view’);

返回充气机。膨胀(r .布局。片段1,容器,假);

}

@覆盖

公共附加时无效(活动Activity){

super.onAttach(活动);

Log.d(标签,'附加时');

}

@覆盖

创建时的公共void(绑定保存的实例状态){

超级棒。oncreate(savedInstanceState);

Log.d(标签,' onCreate ');

}

@覆盖

已创建活动的公共void(捆绑包保存的instancestate){

超级棒。在创建活动时(savedInstanceState);

Log.d(标签,' on activity created ');

}

@覆盖

public void onStart() {

超级棒。onstart();

Log.d(标签,‘onStart’);

}

@覆盖

公共void onResume() {

超级棒。on resume();

Log.d(标签,‘简历上’);

}

@覆盖

public void onPause() {

超级棒。on pause();

Log.d(标签,‘暂停’);

}

@覆盖

public void onStop() {

超级棒。onstop();

Log.d(标签,‘on stop’);

}

@覆盖

public void onDestroyView() {

超级棒。ondestroyview();

Log.d(标签,‘onDestroyView’);

}

@覆盖

public void onDestroy() {

超级棒。on destroy();

Log.d(标签,‘on destroy’);

}

@覆盖

public void onDetach() {

超级棒。on detach();

Log.d(标签,'在分离时');

}

}

可以看到,上面的代码在每个生命周期的方法里都打印了日志,然后我们来运行一下程序,可以看到打印日志如下:

这时点击一下家键,打印日志如下:

如果你再重新进入进入程序,打印日志如下:

然后点击背部键退出程序,打印日志如下:

看到这里,我相信大多数朋友已经非常明白了,因为这和活动的生命周期太相似了。只是有几个活动中没有的新方法,这里需要重点介绍一下:

奥纳塔赫方法:片段和活动建立关联的时候调用。

onCreateView方法:为碎片加载布局时调用。

onActivityCreated方法:当活动中的onCreate方法执行完后调用。

onDestroyView方法:片段中的布局被移除时调用。

onDetach方法:片段和活动解除关联的时候调用。

Fragment之间进行通信

通常情况下,活动都会包含多个片段,这时多个碎片之间如何进行通信就是个非常重要的问题了。我们通过一个例子来看一下,如何在一个碎片中去访问另一个碎片的视图。

还是在第一节代码的基础上修改,首先打开片段2.xml,在这个布局里面添加一个按钮:

线性布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '

Android:layout _ width=' match _ parent '

Android:layout _ height=' match _ parent '

安卓:方向='垂直'

android:background='#ffff00 '

文本视图

Android:layout _ width=' wrap _ content '

Android:layout _ height=' wrap _ content '

android:text='这是片段2 '

android:textColor='#000000 '

android:textSize='25sp' /

纽扣

android:id='@ id/button '

Android:layout _ width=' wrap _ content '

Android:layout _ height=' wrap _ content '

android:text='Get fragment1 text '

/

/线性布局

然后打开片段1.xml,为文本视图添加一个id:

线性布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '

Android:layout _ width=' match _ parent '

Android:layout _ height=' match _ parent '

android:background='#00ff00 '

文本视图

android:id='@ id/fragment1_text '

Android:layout _ width=' wrap _ content '

Android:layout _ height=' wrap _ content '

android:text='这是片段1 '

android:textColor='#000000 '

android:textSize='25sp' /

/线性布局

接着打开Fragment2.java,添加onActivityCreated方法,并处理按钮的点击事件:

公共类碎片2扩展片段{

@覆盖

公共视图oncreate view(LayoutInflater inflater,视图组容器,Bundle savedInstanceState) {

返回充气机。膨胀(r .布局。片段2,容器,假);

}

@覆盖

已创建活动的公共void(捆绑包保存的instancestate){

超级棒。在创建活动时(savedInstanceState);

Button Button=(Button)get activity()。findViewById(r . id。按钮);

按钮。setonclicklistener(new OnClickListener(){

@覆盖

公共void onClick(视图五){

TextView TextView=(TextView)get activity().findViewById(r . id。片段1 _正文);

Toast.makeText(getActivity()、textView.getText()、Toast .长度_长)。show();

}

});

}

}

现在运行程序,点击fragment2上的按钮。效果如下图所示:

我们可以看到fragment1中的视图在fragment2中成功获取,弹出了Toast。这是如何实现的?它们主要通过getActivity的方法来实现。getActivity方法允许片段获取关联的活动,然后调用活动的findViewById方法获取与此活动关联的其他片段的视图。

以上是Android Fragment完整解决方案的细节。更多关于Android Fragment的信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • windowsandroid手机版下载,windowsandroid安装apk
  • windowsandroid手机版下载,windowsandroid安装apk,WindowsAndroid 安装教程详解
  • android调用webview方法,androidwebview是什么,Android 中 WebView 的基本用法详解
  • android传感器高级编程,Android传感器,Android编程之光线传感器用法详解
  • android.app.Dialog,android自定义dialog对话框,Android开发笔记之-Dialog的使用详解
  • android 图片视频轮播框架,androidlayout轮播图,Android实现炫酷轮播图效果
  • android里的viewpager,安卓自定义view流程,Android自定义引导玩转ViewPager的方法详解
  • android里的viewpager,android viewpager详解
  • android里的viewpager,android viewpager详解,Android自定义超级炫酷的ViewPage指示器
  • android调用webview方法,androidwebview是什么
  • android设置控件宽度,android获取屏幕宽度和高度
  • android设置控件宽度,android获取屏幕宽度和高度,Android中获取控件宽高的4种方法集合
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程,android蓝牙简单开发示例教程
  • android菜单栏,android菜单控件
  • 留言与评论(共有 条评论)
       
    验证码: