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()
    问题解决。
  • 相关阅读:
    Appium Android 元素定位方法 原生+H5
    Eclipse下Python的MySQLdb的安装以及相关问题
    Python模块包中__init__.py文件的作用
    如何调用另一个python文件中的代码
    Python单元测试框架unittest使用方法讲解
    python利用unittest进行测试用例执行的几种方式
    python随机生成手机号码
    eclipse 安装python后pydev不出现
    Appium 如何模拟返回按键
    python分布式进程
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3255608.html
Copyright © 2011-2022 走看看