zoukankan      html  css  js  c++  java
  • fragment 小结

    1:注意事项
      3.0以前的Android 版本要使用FragmentActivity 来装载Fragment ,使用到support v4包。
      3.0以后的版本可以直接在Activity里面添加Fragment
    2Fragment也有生命周期,继承Fragment 要重新onCreateView方法,另外onResumeonDestroyView 等方法根据需要填写。
    3:在activity中加入Fragment有两种方法:布局和代码动态加入。布局加入和在布局加入viewbutton等用法一样。
    4:在Activity中动态加入Fragment google 教程http://developer.android.com/training/basics/fragments/fragment-ui.html
    // 创建一个Fragment实例
    HeadlinesFragment firstFragment = new HeadlinesFragment();
                
                // In case this activity was started with special instructions from an Intent,
                // pass the Intent's extras to the fragment as arguments
                firstFragment.setArguments(getIntent().getExtras());
                
                // Add the fragment to the 'fragment_container' FrameLayout
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.fragment_container, firstFragment).commit();
    5:一个Fragment替换另一个Fragment
    ArticleFragment newFragment = new ArticleFragment();
    //要传递给newFragment的信息,可以来自于其它Fragment
    Bundle args = new Bundle();
    args.putInt(ArticleFragment.ARG_POSITION, position);
    newFragment.setArguments(args);

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    // Replace whatever is in the fragment_container view with this fragment,
    // and add the transaction to the back stack so the user can navigate back
    transaction.replace(R.id.fragment_container, newFragment);
    transaction.addToBackStack(“xxxxx”);//一个字符串标识

    // Commit the transaction
    transaction.commit();
    要想点击back可以返回上一个fragment ,transaction.addToBackStack(“xxxxx”);//一个字符串标识  这个必须有。
    6Fragment 替换另一个Fragment时 数据传递
    例如:点击fragmentA 中的一个按钮 启动fragmentB ,FragmentActivity 是 activityFragment
    (1)通过Intent传递数据
         Intent  intent = new Intent();
    //把数据加入intent中
    intent.putExtra("xxx", xxx);
    intent.putExtra("xxx", xxx);     
    ......
    activityFragment .setIntent(intent);
    //启用事务,完成Fragment的转换。
    FragmentTransaction transaction = activityFragment.getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.xxx, fragmentB);
    //不将被替换的fragment加入栈中,点击返回调用系统默认的方法onBackPress()时不会返回上一个fragment
    transaction.addToBackStack("msg_fragment");
    transaction.commit();
    (2) 通过setfragment.setArguments(Bundle args)
    Bundle bundle = new Bundle();
    //往Bundle中放入数据
    Bundle.put(xxxx);
    .....
    fragmentB.setArgument();
    //启用事务,完成Fragment的转换。
    FragmentTransaction transaction = activityFragment.getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.xxx, fragmentB);
    //不将被替换的fragment加入栈中,点击返回调用系统默认的方法onBackPress()时不会返回上一个fragment
    transaction.addToBackStack("msg_fragment");
    transaction.commit();
    fragmentB中 通过fragmentB.getArgument();方法获得Bundle,在取出数据。
    7:关于Context 的使用
    我在fragmentA创建一个自定义的dialog时 出现如下异常
    06-24 14:34:52.147: E/AndroidRuntime(4853): FATAL EXCEPTION: main
    06-24 14:34:52.147: E/AndroidRuntime(4853): java.lang.RuntimeException: Unable to resume activity {xxx}: java.lang.RuntimeException: Unable to resume activity {xxxxx.MsgActGroup}: java.lang.RuntimeException: Unable to resume activity {xxxx/com...MsgFragmentAct}: android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@4054d430 is not valid; is your activity running?
    情况是这样:fragmentActivity ActivityGroup的一个子ActivityfragmenAfragmentActivity 的一个Fragment。这个异常可以翻译成:
    fragmentA现在还处于运行状态吗?
    可能是创建dialog时传入的context fragmentA.getActivity() fragmentActivity 有问题。改成fragmentA.getActivity().getParent()
    问题解决。
  • 相关阅读:
    二分图 洛谷P2055 [ZJOI2009]假期的宿舍
    并查集 洛谷P1640 [SCOI2010]连续攻击游戏
    贪心 洛谷P2870 Best Cow Line, Gold
    贪心 NOIP2013 积木大赛
    快速幂 NOIP2013 转圈游戏
    倍增LCA NOIP2013 货车运输
    树形DP 洛谷P2014 选课
    KMP UVA1328 Period
    动态规划入门 BZOJ 1270 雷涛的小猫
    KMP POJ 2752Seek the Name, Seek the Fame
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3255608.html
Copyright © 2011-2022 走看看