您的位置:首页 > 移动开发 > Android开发

Android Fragment实用方法及交互实例

2014-12-30 08:40 363 查看
android3.0 新增的两个API,这篇文章主要是介绍fragment的用法,当然也有实例。先上源码:

简单来说fragment的生命周期其实和activity差不多,而在我们使用fragment的时候更多的却是使用他的

[align=left]onCreateView方法,这个就相当于fragment开始布局,而它从这个方法之后几乎和activity一样了。所以在此我不再强调他的整个周期了。[/align]
该实例比较简单而我主要想阐述的是两个fragment如何相互之间通信。



activity进入时的界面界面布局:activity_main.xml

[Java]
纯文本查看 复制代码

?
这里被注释的部分是用来比较,从代码中给FrameLayout添加fragment和直接在布局文件中添加fragment的区别,最终发现,虽然在最后达到的效果是一样的,但是实际上在代码中的交互却是有很大差异的。(差异稍后再议)

在布局文件中实用的com.godxj.fragments.fragmentsview.TagFragment该类很简单

[Java]
纯文本查看 复制代码

?
TagFragment是一个继承自Fragment的类,只需要实现这个方法就行。次方法就是刚开始说的开始布局,实际上就是将view填到 activity_main.xml

对应的位置。 而在activity_main.xml中定义的FragmentLayout这个布局 如果需要添加一个fragment 便需要在代码中activity类中添加:

[Java]
纯文本查看 复制代码

?
当然,这里我也曾遇到过一个问题,我用3.2的 在df = (DetailFragment) fm.findFragmentById(R.id.details_fragment);(此处实际上可以省略)

(自己定义的一个继承自fragment的类)的时候出现了错误,事实上3.0以上的版本只要继承activity就不会出现错,但是我的却只能继承FragmentActivity才避免了出错。而且最终获得FragmentManager 的方法也是从android.support.v4.app.FragmentManager;这来获得。

此处的FragmentTransaction 相当于数据库的事物操作 开启一个事物 最后一定要记得提交。replace 就相当如 把这个实例化了的fragment放到FragmentLayout上面去。(如果你不想用FragmentLayout也可以,这样也不需要从代码中启动事物,只要像activity_main.xml注释掉了的代码那样就可以)

接下来的DetailFragment类 ,和前面的TagFragment是一样的但是为了后面方便讲解交互贴下代码:

[Java]
纯文本查看 复制代码

?
主要方法任然是onCreateView。这里定义的接口是交互实用的后面讲解。当然还有两个xml文件布局就不用贴了,就是图上左边和右上边的那个布局。到此界面基本就算是构建完成了,就剩下两个个问题,fragment 和FragmentLayout,上面略次提到的--交互。

首先:第一个问题,用fragment 和FragmentLayout。如果使用fragment 那么我们在主activity中是可以得到fragment里面那些view的id并对其作出相应的处理的,这个就和自己定义在activity_main.xml里面的控件一样的操作。而用FragmentLayout你是无法对得到的view进行事件处理,实际上你根本无法得到Fragmentlayout里面的view。所以在交互的实际过程中处理起来就没用直接用fragment在布局文件中定义那么轻松。如果在布局文件中是两个fragment你完全可以像平时那样做。

然后:第二个问题, 如何交互。刚刚说到用fragment定义的布局是可以从主activity直接得到,而Fragmentlayout却不行,所以,最简单实际的方法就是讲在Fragmentlayout里面的view 传给主activity,而这个却是完全能实现的。buttonClickListener.sendViewToActivity(btn);此方法就是将

Fragmentlayout里面的btn暴露给主activity 然后它就可以想平时一样操作这些控件。

例子上的效果是如此:当点击最坐标那个图标叹号的时候出现的效果是这样的:



而当点击button1的时候效果又是:



实现了两者之间的交互。

本文转自:http://www.apkbus.com/forum.php?mod=viewthread&tid=103893
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: