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 】
发表评论