zoukankan      html  css  js  c++  java
  • Android 笔记-Fragment 与 Activity之间传递数据

    Fragment 与 Activity之间传递数据有两种方法。一种是使用setArgument,一种是使用接口回调。以下先学习第一种方法。

    1)使用setArgument方法:

    为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部)。各自是Fragment1,Fragment2Fragemnt3

    如今他如今要吩咐部门Fragment1去做一些事情,比方说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的。

    一般来说,会有个宰相或者太监总管来负责皇帝口谕是吧;这个太监总管就是FragmentManager。然后,当然。

    太监总管也是不会亲自跑过去的,这时候有个名叫FragmentTransaction  的事务太监,总的来说,

    它就负责三件事情:add(), remove(), replace()依照皇帝的意思去添加一个部门,撤销一个部门,和替换掉一个部门。

    如今这个事务太监有新任务了。就是添加一个部门,然后告诉它去攻打岛国。

    好。

    把内容“带兵攻打岛国”装到信封里

    (信封就是Bundle)。注意到,这是密令,当然要做个记号什么的来标记一下。就是加上Tag,这里我们指定是“179521”。

    最后绑在白鸽上发送出去(commit())。


    <pre name="code" class="java">@Override
    	public void onClick(View arg0) {
    		if (arg0.getId()==R.id.send_data_btn) {
    			LeftFragment fragment = new LeftFragment();
    			Bundle bundle = new Bundle();
    			bundle.putString("order", "带兵攻打岛国");
    			fragment.setArguments(bundle);
    			FragmentManager fragmentManager = getFragmentManager();
    			//開始Fragment事务
    			FragmentTransaction fTransaction = fragmentManager.beginTransaction();
    			//将Fragment加入到事务中,并指定一个TAG 
    			fTransaction.add(fragment, "179521");
    			//提交Fragment事务
    			fTransaction.commit();
    		}
    		
    	}


    
    

     

    上面那个比喻不是十分恰当。如今用正式的语言来说明下哈:

    要是你熟悉Activity的生命周期。应该知道每个应用都有一个独一无二的TaskTask里有个回退栈backstack。存储Activity的窗体实例对象;

    因为Fragment也是有窗体实例对象的,因此它出现时也是要进入到回退栈的。

    使用FragmentAndroid为了让用户或者开发人员来运行对Fragment的管理,比方说添加,移除和替换等。

    Android3.0后有一个类。

    FragmentManager专门用来管理Fragment,可是它不亲自运行详细动作。而是使用一个对象,片段事务,FragmentTransaction

    应该认识到的是 每一个FragmentTransaction是一组同一时候运行的变化的集合。比方说同一时候加入2Fragment,然后删除当中一个。

    这都是同一时候运行的。用add(),remove(), replace()方法。把全部须要的变化加进去,然后调用commit()方法,将这些变化应用。

    在commit()方法之前。你能够调用addToBackStack()。把这个transaction增加backstack中去,这个back stack是由activity

    管理的。当用户按返回键时,就会回到上一个fragment的状态。

     

    Fragment接收数据:

    得到FragmentManager,然后依据标签Tagkey取出相应的内容。

    <pre name="code" class="java">@Override
    	public void onClick(View arg0) {
    		if (arg0.getId()==R.id.get_data_btn) {
    			String name = getFragmentManager().findFragmentByTag("179521").getArguments().getString("order");
    			Toast.makeText(getActivity(), "命令是"+name, Toast.LENGTH_SHORT).show();
    		}
    	}


    
    
    结果例如以下:




    明天再把回调的方法写上。

    先上传第一个方法的DEMO样例。

    例程下载


     



  • 相关阅读:
    熟悉常用的Linux操作
    组合数据类型练习
    简易的词法分析程序
    大数据概述
    201552040205 关于对java的体验与感悟
    对已学习的java内容的一些感悟
    关于java中的一些小技巧
    Javase 大纲2
    Javase大纲
    MysQL知识整理
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6756970.html
Copyright © 2011-2022 走看看