Android Fragment实用方法及交互实例
来源:互联网 发布:工业机器人编程 编辑:程序博客网 时间:2024/06/09 20:17
简单来说fragment的生命周期其实和activity差不多,而在我们使用fragment的时候更多的却是使用他的
activity进入时的界面界面布局:activity_main.xml
这里被注释的部分是用来比较,从代码中给FrameLayout添加fragment和直接在布局文件中添加fragment的区别,最终发现,虽然在最后达到的效果是一样的,但是实际上在代码中的交互却是有很大差异的。(差异稍后再议)
在布局文件中实用的com.godxj.fragments.fragmentsview.TagFragment该类很简单
TagFragment是一个继承自Fragment的类,只需要实现这个方法就行。次方法就是刚开始说的开始布局,实际上就是将view填到 activity_main.xml
对应的位置。 而在activity_main.xml中定义的FragmentLayout这个布局 如果需要添加一个fragment 便需要在代码中activity类中添加:
当然,这里我也曾遇到过一个问题,我用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是一样的但是为了后面方便讲解交互贴下代码:
主要方法任然是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的时候效果又是:
实现了两者之间的交互。
onCreateView方法,这个就相当于fragment开始布局,而它从这个方法之后几乎和activity一样了。所以在此我不再强调他的整个周期了。
该实例比较简单而我主要想阐述的是两个fragment如何相互之间通信。activity进入时的界面界面布局:activity_main.xml
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
>
<fragment
android:id=
"@+id/tag"
android:name=
"com.godxj.fragments.fragmentsview.TagFragment"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
/>
<!--
<fragment
android:id=
"@+id/details"
android:name=
"com.godxj.fragments.fragmentsview.DetailFragment"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"3.5"
/>
-->
<FrameLayout
android:id=
"@+id/details_fragment"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"3.5"
/>
</LinearLayout>
这里被注释的部分是用来比较,从代码中给FrameLayout添加fragment和直接在布局文件中添加fragment的区别,最终发现,虽然在最后达到的效果是一样的,但是实际上在代码中的交互却是有很大差异的。(差异稍后再议)
在布局文件中实用的com.godxj.fragments.fragmentsview.TagFragment该类很简单
[Java] 纯文本查看 复制代码
1
2
3
4
5
6
@Override
public
View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tag, container,
false
);
return
view;
}
TagFragment是一个继承自Fragment的类,只需要实现这个方法就行。次方法就是刚开始说的开始布局,实际上就是将view填到 activity_main.xml
对应的位置。 而在activity_main.xml中定义的FragmentLayout这个布局 如果需要添加一个fragment 便需要在代码中activity类中添加:
[Java] 纯文本查看 复制代码
1
2
3
4
5
6
7
FragmentManager fm = getSupportFragmentManager();
df = (DetailFragment) fm.findFragmentById(R.id.details_fragment);
df =
new
DetailFragment();
FragmentTransaction ft = fm.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.details_fragment, df);
ft.commit();
当然,这里我也曾遇到过一个问题,我用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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public
class
DetailFragment
extends
Fragment {
private
Button btn;
OnItemButtonClickListener buttonClickListener;
@Override
public
void
onAttach(Activity activity) {
super
.onAttach(activity);
buttonClickListener = (OnItemButtonClickListener) activity;
}
@Override
public
void
onActivityCreated(Bundle savedInstanceState) {
super
.onActivityCreated(savedInstanceState);
}
@Override
public
View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.details, container,
false
);
btn = (Button) view.findViewById(R.id.btn1);
buttonClickListener.sendViewToActivity(btn);
btn.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
buttonClickListener.onItemViewClick(v);
}
});
return
view;
}
public
interface
OnItemButtonClickListener{
void
onItemViewClick(View v);
void
sendViewToActivity(View v);
}
}
主要方法任然是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的时候效果又是:
实现了两者之间的交互。
0 0
- Android Fragment实用方法及交互实例
- Android Fragment实用方法及交互实例
- Android之Fragment实现界面交互小实例1
- Android之Fragment实现界面交互小实例2
- android fragment 交互
- Android编程心得-FragmentActivity与Fragment两者交互方法简介
- Android编程心得-FragmentActivity与Fragment两者交互方法简介
- window.open()方法的几个实用方法及实例
- Android Fragment生命周期及各个方法使用
- Android实用方法— ViewPager + Fragment取消预加载以及Activity传值给Fragment
- Android fragment与Activity交互
- 【Android策略】Fragment实例化及通过setArguments解决 android.support.v4.app.Fragment$InstantiationException
- Android Fragment 实例
- Android Fragment实例
- Android Fragment实例
- Android组件:Fragment实例
- Android Fragment 简单实例
- Android Fragment实例
- C++之多线程编程互斥锁-四
- ABAP模块-查找系统出口或BADI的方法
- java中接口的定义与实现
- 浏览器兼容性调试集锦
- Leetcode: Repeated DNA Sequence
- Android Fragment实用方法及交互实例
- Hibernate与JDBC的区别
- 前端好用的插件集合
- 带缓冲IO与不带缓冲IO
- 第2周项目3时间类
- VBA 学习笔记 (任务完成,准备告一段落)
- 图片适配
- Unity学习 第一课==备忘录
- hdoj 1106 排序——脑洞产物 两种做法