Android Fragment小结

为何使用Fragment?

实现UI的灵活组建与拆分,与Activity配合可保持Activity的视图不变,转而操作Fragment,就像Activity的模块与组建一样。同时解决了

在平板上UI的适应性。

《Android编程权威指南》一书作者提出了AUF(即Always Use Fragment)原则----暂且相信他

Fragment 的生命周期依赖于Activity的生命周期,并且有自己独特的方法,不多赘述。

1.获取Fragment的视图(layout转成视图对象)

通过重写fragment的oncreatView()方法

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		 View v = inflater.inflate(R.layout.fragment, container, false);
	 return v;
 	}

第一个参数是生成视图的布局资源ID,第二个参数是视图的父视图,第三个参数告知布局生成器是否将生成的视图添加给父视图。

2.一个近乎通用的托管Fragment的类

public abstract class SingleFragmentActivity extends FragmentActivity {

	protected abstract Fragment createFragment();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_fragment);
//获取Fragment管理者
FragmentManager fm =getSupportFragmentManager();
	   Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);

		if (fragment==null){
			fragment=  createFragment();

			fm.beginTransaction()
			.add(R.id.fragmentContainer,fragment)
			.commit();

		}

	}
}

3.Fragment与Fragment、Activity之间的通信(数据传递)

有两种方法:

第一种是通过Intent 的方法

①Fragment->Activity

通过Intent的putXXX方法把数据传到Activity

Intent i = new Intent(getActivity(),CrimePagerActivity.class);
		i.putExtra(CrimeFragment.EXTRA_CRIME_ID, c.getId());
		 startActivity(i);

②Activity->Fragment

在Fragment中通过getActivity()获得托管该Fragment的Activity的引用,然后通过getIntent().getXXX方法获得数据

UUID crimeId = (UUID)getActivity().getIntent().getSerializableExtra(EXTRA_CRIME_ID);

这种方法虽然方便,但是牺牲了Fragment的封装性,该Fragment不再是可复用的构建但愿,因为它总是需要某个具体的Activity托管者,这里推荐使用第二种方法。

第二种方法,使用Fragment 的argument

每个Fragment实例都可带一个Bundle对象,该Bundle包含Key-value 对,我们可以如同附加到extra到Activity的Intent中那样使用它们,要创建Fragment,首先需要创建Bundle对象。附加Bundle给Frament,需调用Fragment.setArgument(Bundle)方法。

Android常用的做法是,添加名为newInstance()的方法给Fragment。

	public static CrimeFragment newInstance(UUID crimeId){
		Bundle args  = new Bundle();
		args.putSerializable(EXTRA_CRIME_ID, crimeId);
		CrimeFragment fragment = new CrimeFragment();
		fragment.setArguments(args);
		return fragment;
	}
}

Activity获取Fragment的数据

UUID crimeId = (UUID) getIntent()
				.getSerializableExtra(CrimeFragment.EXTRA_CRIME_ID);
时间: 2024-10-26 07:10:56

Android Fragment小结的相关文章

Android Fragment 真正的完全解析(上)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~ 本篇博客力求为大家说明Fragment如何产生,什么是Fragment,Fragment生命周期,如何静态和动态的使用Fragment,Fragment回退栈,Fragment事务:以及Fragment的一些特

Android Fragment 的使用,一些你不可不知的注意事项

Fragment,俗称碎片,自 Android 3.0 开始被引进并大量使用.然而就是这样耳熟能详的一个东西,在开发中我们还是会遇见各种各样的问题,层出不穷.所以,是时候总结一波了. Fragment 简介 作为 Activity 界面的一部分,Fragment 的存在必须依附于 Activity,并且与 Activity 一样,拥有自己的生命周期,同时处理用户的交互动作.同一个 Activity 可以有一个或多个 Fragment 作为界面内容,并且可以动态添加.删除 Fragment,灵活控

【Android自学日记】【转】Android Fragment 真正的完全解析(下)

上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API,如果你还不了解,请看:Android Fragment 真正的完全解析(上). 本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activity交互,Fragment与Activity交互的最佳实践,没有视图的Fragment的用处,使用Fragment创建对话框,如何与ActionBar,MenuItem集成等~~ 1.管理Fragment回退栈 类似与Android系统为Activi

android fragment 博客 学习记录

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API,如果你还不了解,请看:Android Fragment 真正的完全解析(上). 本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activity交互,Fragment与Activity交互的最佳实践,没有视图的Fragment的用处,使用Fragment创

Android Fragment应用实战,使用碎片向ActivityGroup说再见

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/13171191 现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上,也有很多的场景可以运用到Fragment了,今天我们就来学习其中一个特别棒的应用技巧. 很多手机应用都会有一个非常类似的功能,即屏幕的下方显示一行Tab标签选项,点击不

[Android]Fragment源码分析(一) 构造

Fragment是Android3.0之后提供的api,被大家广泛所熟知的主要原因还是因为随即附带的ViewPager控件.虽然我并不喜欢用它,但是它确实是一个相对不错的控件.还是我的一贯作风,我将从源码上向大家展示什么是Fragment.我们先写一个简单的代码对Fragment有个直观的认识:(为了保证我们方便调试,我们可以直接使用V4提供的源码包) FragmentTransaction t = getSupportFragmentManager().beginTransaction();

Android Fragment 嵌套使用报错

在新的SDK每次创建activity时,会自动生成 <pre name="code" class="java">public static class PlaceholderFragment extends Fragment fragment模块,在该模块的基础上进行嵌套fragment代码如下: <pre name="code" class="java">public static class Pla

Android Fragment 生命周期及其API使用

Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 ) 生命周期回调说明: onAttach(Activity)当Fragment与Activity发生关联时调用.onCreateView(LayoutInflater, ViewGroup,Bundle)创建该Fragment的视图onActivityCreated(Bundle)当Activity的onCreate方法返回时调用onDestoryView()与onCrea

Android Fragment 完全解析

参考文章:http://blog.csdn.net/guolin_blog/article/details/8881711 http://blog.csdn.net/guolin_blog/article/details/13171191 Android Fragment应用实战,使用碎片向ActivityGroup说再见 界面如下: 实现步骤: 程序结构: 编写主界面的xml文件 <?xml version="1.0" encoding="utf-8"?&g