• Android开发笔记(10)——使用Fragment传递


    转载请注明:http://www.cnblogs.com/igoslly/p/6911165.html

     

    由于最近废寝忘食地在开发App,没来得及及时做总结,没有用很高级的部件,勉强也使用一些功能完成了自己的第一个App,撒花~~~

    接下来都是自己在开发中使用后的一些经验,也是和他人学习实践后的成果,主要是关于Fragment。

     

     

    使用Fragment传递

    添加Fragment


    添加 Fragment 有静态添加 & 动态添加两种方式,

    静态添加是在 Layout 布局中添加 <Fragment> 控件,由于可以设置 id,则可通过 id 寻找

    <Fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fragment1"/>
    
    

    动态添加fragment则完全在程序中定义添加 添加同时设定 TAG,通过 TAG 寻找实例(见后 Transaction)
    // 对activity中的Fragment进行管理,需要通过Fragment Manager
    FragmentManager manager = getFragmentManager();
    manager.findFragmentById();  //根据ID查找
    manager.findFragmentByTag();//根据TAG查找
    manager.getFragments();//获取所有被ADD进Activity中的Fragment 
    
    
     


    Fragment Manager & Transaction

    FragmentManager
    ,获取当前Activity的所有Fragment,形成fragment栈
    FragmentTransaction,则可以管理当前的Fragment Transcation 控制 Fragment 的显示、添加、替换等等,如 add / remove / replace commit() 对操作的 Fragemnt 提交到系统,进行显示
    replace(R.id.content_frame,fragment).commit();  //替换——删除添加操作
    add(R.id.container,fragment1,String tag);    //添加fragment,并设置动态查找TAG
    remove(fragment1);                          //删除

    故而 Fragment 常被用于导航栏的切换内容,每点击导航栏不同图标,系统便调用响应的 Fragment 布局和内容,较为方便



    
    
    Activity或Fragment向Fragment之间的参数传递

    Bundle args = new Bundle();
    args.put("value_key",value);
    
    
          
    value_key
    是在传输读取中约定的关键词,传输值可以为多种类型,int,String,Array等等

    Fragment fragment = new Fragment();
    fragment.setArguments(args);      //将bundle传给fragment
    
    fragment 读取值

    red = getArguments().getInt("value_key1");
    yellow = getArguments().getString("value_key2");
    
    

    当需要从 Fragment 返回原活动时,需要设置 fragment 连接

    
    
    aheadDialogue.setTargetFragment(CompetitionFragment.this,REQUEST_CODE);
    getFragmentManager().beginTransaction().replace(R.id.content_frame, fragment1).addToBackStack(null).commit();
    getFragmentManager().popBackStack();  //返回
     
    原Fragment接收返回值,在onActivityResult进行定义
            request_code   是用户自定义  integer
            resultCode       通常是活动状况,是否正常结束

    
    
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    //        super.onActivityResult(requestCode, resultCode, data);
    //        可判断不同requestCode接受不同返回值操作
        if (requestCode==0x1001) {
            if (resultCode != Activity.RESULT_OK) { //这里再对activity状态进行判断
                return;
            } else {
                hitPlayer = data.getStringExtra("hitplayer");
                hitNumber = data.getIntExtra("hitnumber", 0);
            }
        }
        if (requestCode==0x1111) {
            //blablabla
        }
     }

    推荐介绍Fragment挺详细的blog:http://blog.csdn.net/harvic880925/article/details/44927375

    本笔记内容均为个人学习整理,转载请注明博客园-igoslly

  • 相关阅读:
    搭建docker私有registory (harbor)
    消息队列原理及ActiveMQ、RocketMQ、RabbitMQ、Kafka区别总结
    too many users are authenticated
    docker环境部署nginx、tomcat、redis
    docekr环境部署mysql、kafaka、kafkamanager和mongodb
    在IE6 情况下让PNG图片透明的3种方法
    ecshop商品列表页出现一个空的搜索结果
    ecshop去掉国家省市区,实现手动填写收货地址
    ecshop始终显示全部分类
    ecshop商品列表页增加/显示货号SN
  • 原文地址:https://www.cnblogs.com/igoslly/p/6911165.html
Copyright © 2020-2023  润新知