码迷,mamicode.com
首页 > 移动开发 > 详细

Android Fragment小结

时间:2015-06-13 21:42:56      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:android   layout   

为何使用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);





Android Fragment小结

标签:android   layout   

原文地址:http://blog.csdn.net/chaoshenyutou/article/details/46484077

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!