Android菜鸟笔记-Fragment日常使用记录

来源:互联网 发布:淘宝店在哪进货 编辑:程序博客网 时间:2024/05/17 04:40

以下为本人日常使用Fragment时遇到的一些基础知识点,记录以加深印象:

1. xml layout中静态添加Fragment时,宿主Activity必须继承FragmentActivity

2. 代码中动态加载Fragment时,Fragment显示的区域为layout中的FrameLayout

 <FrameLayout        android:id="@+id/frame_container"        android:layout_width="match_parent"        android:layout_height="match_parent" />

3.Fragment中根据layout生成UI的代码为:

@Overridepublic View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {// TODO Auto-generated method stubView view = inflater.inflate(R.layout.fragment_main,container, false);return view;}

4. Activity中动态添加Fragment的简单代码为:
getFragmentManager().beginTransaction().replace(R.id.frame_container, mFragment).commit();
5.加载Fragment的时候可以添加动画效果:
getFragmentManager().beginTransaction().setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right).replace(R.id.frame_container, mFragment).commit();
6.Fragment加载其它Fragment时通过getActivity().getSupportFragmentManager()获取FragmentManager对象

7. Activity或者Fragment与其他Fragment传值:

Fragment fragment = new Fragment();Bundle bundle = new Bundle();  bundle.putString("argument", value);  fragment.setArguments(bundle);  
8.单一Fragment被复用时,要保证每次创建的唯一性,同时来回切换时还要避免反复创建,我们可以通过创建它时传递一个tag参数来标记,这样就可以通过tag来获取了:
private void showFragment(int position,String tag){FragmentManager fm = getFragmentManager();FragmentTransaction transaction = fm.beginTransaction();                 Fragment currentFragment = fm.findFragmentById(R.id.frame_container);                Fragment toFragment = fm.findFragmentByTag(tag);                if(toFragment!=null)        {        if(!toFragment.isVisible())        {                transaction.hide(currentFragment);            transaction.show(toFragment);            transaction.commit();        }        }        else        {        transaction.hide(currentFragment);        Fragment fragment = new Fragment();        transaction.add(R.id.frame_container,fragment, tag);        transaction.commit();        }       }
9. Fragment需要创建menu时:
需要先在onCreate()方法里添加setHasOptionsMenu(true);,然后覆写onCreateOptionsMenu方法:
@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setHasOptionsMenu(true); } @Override    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {         menu.clear();//清除原先activity的menu        inflater.inflate(R.menu.work, menu);//加载自己的menu        super.onCreateOptionsMenu(menu, inflater);}







1 0