好记性不如铅笔头

android, 编程

Android应用开发笔记:Fragment的使用

Fragment有两种常用的方法,第一种是在一个framelayout上面动态的添加和删除,第二种是和viewpager合用,第三种是直接使用。下面备份下代码:

github:

https://github.com/cstriker1407/android/tree/master/HelloFragment 】

CONTENTS

1)直接使用和动态替换

TopFragment:

public class TopFragment extends ListFragment
{
	private static final String[] WEEKS = new String[] { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };

	// 初始化的选择位置
	int mCurCheckPosition = 0;

	@Override
	public void onActivityCreated(Bundle savedInstanceState)
	{
		super.onActivityCreated(savedInstanceState);
		// 设置要显示的数据
		setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.activity_list_item, android.R.id.text1, WEEKS));
		showDetails(mCurCheckPosition);
	}

	private void showDetails(int index)
	{
		// fragment的管理器
		FragmentManager fm = getFragmentManager();
		/*  */
		MiddleFragment details = (MiddleFragment) fm.findFragmentById(R.id.framelayout);

		if (details == null || details.getShowIndex() != index)
		{
			// 设置为单选模式
			getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
			// 指定条目被选中
			getListView().setItemChecked(index, true);

			details = MiddleFragment.newInstance(index);
			// 新建DetailFragment的实例
			FragmentTransaction ft = fm.beginTransaction();
			// 替换FrameLayout为DetailFragment 类似于 事务
			ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
			// 将得到的fragment 替换当前的viewGroup内容,add则不替换会依次累加
			
			/* 这里是将fragment替换detail里的内容,也就是说detail是个父容器,因此在上面的findfragmentbyid就可以以detail为父容器来查找地下是否有fragment */
			ft.replace(R.id.framelayout, details);
			// 提交
			ft.commit();
		}
	}

	@Override
	public void onListItemClick(ListView l, View v, int position, long id)
	{
		super.onListItemClick(l, v, position, id);
		showDetails(position);
	}

}

 2)通过viewpager来使用

MainActivity:

public class MainActivity extends FragmentActivity {

	private ViewPager viewPager;
	private ArrayList<Fragment> fragmentsList;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		viewPager = (ViewPager) findViewById(R.id.viewpager);

		fragmentsList = new ArrayList<Fragment>();
		fragmentsList.add(BottomFragment.newInstance("First"));
		fragmentsList.add(BottomFragment.newInstance("Second"));
		fragmentsList.add(BottomFragment.newInstance("Third"));
		fragmentsList.add(BottomFragment.newInstance("Fourth"));
		fragmentsList.add(BottomFragment.newInstance("Fifth"));
		viewPager.setAdapter(new MyFragmentPagerAdapter(
				getSupportFragmentManager(), fragmentsList));
	}
}

class MyFragmentPagerAdapter extends FragmentPagerAdapter {
	private ArrayList<Fragment> fragmentsList;

	public MyFragmentPagerAdapter(FragmentManager fm) {
		super(fm);
	}

	public MyFragmentPagerAdapter(FragmentManager fm,
			ArrayList<Fragment> fragments) {
		super(fm);
		this.fragmentsList = fragments;
	}

	@Override
	public int getCount() {
		return fragmentsList.size();
	}

	@Override
	public Fragment getItem(int arg0) {
		return fragmentsList.get(arg0);
	}

	@Override
	public int getItemPosition(Object object) {
		return super.getItemPosition(object);
	}
}

 全部代码就不贴在这里了。

备注:

1)Fragment是一个很强大的东东,这里先简单的备忘一下,后续需要更加仔细的学习和应用。

2)参考网址

http://my.eoe.cn/leigo/archive/2817.html 】

http://blog.csdn.net/guolin_blog/article/details/8744943 】

http://blog.csdn.net/guolin_blog/article/details/8881711 】

http://www.cnblogs.com/TerryBlog/archive/2012/02/17/2355753.html 】

发表评论

2 × 1 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据