笔者最近看官方training。发现了非常多实用又好玩的知识。

当中。fragment与Activity通信就是一个。

fragment与Activity通信主要是两点:

1、fragment传递信息给Activity

此点是通过在fragment中定义接口与Activity共享数据。

2、Activity传递信息给fragment

此点主要是通过fragment的getArgument()和setArgument()两个函数传递bundle来传递。

效果:(最后附上源代码)

主要流程:

1、在MainActivity中设置一个fragment容器,在MainActivity初始化的时候替换成OneFragment。

2、OneFragment中因为定义了接口,在MainActivity中实现了此接口。当点击button的时候会实现此接口中的函数,而且和Activity共享此数据。

(也就是EditText中的内容)

3、MainActivity中获取到数据后,创建一个新的TwoFragment。而且使用Fragment的setArgument()方法把获取到的数据传递到TwoFragment,TwoFragment使用getArgument()接收。

代码:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

MainActivity:

package com.example.trainingfragment;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle; public class MainActivity extends Activity
implements OneFragment.OnOneFragmentClickListener{ private FragmentManager fm;
private FragmentTransaction ft; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); fm=getFragmentManager();
ft=fm.beginTransaction();
ft.replace(R.id.fragment_container,new OneFragment());
//使用FragmentTransaction一定不要忘记提交
ft.commit();
} @Override
public void onArticleClick(String text) {
//此处定义一个新的TwoFragment
//而且把在OneFragment获取到的text传入TwoFragment
TwoFragment newFragment = new TwoFragment();
Bundle args=new Bundle();
args.putString("text", text);
newFragment.setArguments(args); //因为之前的一个FragmentTransaction已经提交过,所以此处须要又一次定义
ft=fm.beginTransaction();
ft.replace(R.id.fragment_container, newFragment);
//使用FragmentTransaction一定不要忘记提交
ft.commit(); }
}

OneFragment:

package com.example.trainingfragment;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText; /**
* 项目名称:TrainingFragment
* 类描写叙述:
* 创建人:佳佳
* 创建时间:2016/3/25 17:57
* 改动人:佳佳
* 改动时间:2016/3/25 17:57
* 改动备注:
*/
public class OneFragment extends Fragment { OnOneFragmentClickListener mCallback;
private EditText et;
private Button btn; //此处定义接口
public interface OnOneFragmentClickListener {
//在接口中定义函数
void onArticleClick(String text);
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_one,container,false);
et=(EditText)view.findViewById(R.id.et_one);
btn=(Button)view.findViewById(R.id.btn_one);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCallback.onArticleClick(et.getText().toString());
}
}); return view;
} @Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallback = (OnOneFragmentClickListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
}

TwoFragment:

package com.example.trainingfragment;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; /**
* 项目名称:TrainingFragment
* 类描写叙述:
* 创建人:佳佳
* 创建时间:2016/3/25 17:57
* 改动人:佳佳
* 改动时间:2016/3/25 17:57
* 改动备注:
*/
public class TwoFragment extends Fragment { @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_two, container, false);
} @Override
public void onStart() {
super.onStart();
//获取Activity传递过来的数据而且显示到
Bundle args=getArguments();
setMyText(args.getString("text"));
} public void setMyText(String text) {
TextView tv=(TextView)getActivity().findViewById(R.id.tv_two);
tv.setText(text);
}
}

activity_main:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />

fragment_one:

<?xml version="1.0" encoding="utf-8"?

>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"> <EditText
android:id="@+id/et_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入要传递的内容" /> <Button
android:id="@+id/btn_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="跳转并传递"
android:textSize="20sp" />
</LinearLayout>

fragment_two:

<?

xml version="1.0" encoding="utf-8"?

>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"> <EditText
android:id="@+id/et_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入要传递的内容" /> <Button
android:id="@+id/btn_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="跳转并传递"
android:textSize="20sp" />
</LinearLayout>

源代码地址:http://download.csdn.net/detail/double2hao/9472978

android Fragment与Activity交互,互相发数据(附图具体解释)的更多相关文章

  1. Android Fragment与Activity交互的几种方式

    这里我不再详细介绍那写比较常规的方式,例如静态变量,静态方法,持久化,application全局变量,收发广播等等. 首先我们来介绍使用Handler来实现Fragment与Activity 的交互. ...

  2. Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)

    Fragment与Activity之间的数据交换,通常含有3: 一.Fragment从Activity获取数据(仅本文介绍了一个第一): 两.Activity从Fragment获取数据: 三.Frag ...

  3. Android基础——Fragment与Activity交互

    今天继续讲解Fragment组件的特性,主要是跟Activity的交互和生命周期的关系,我们前面已经说过Fragment是依赖于Activity的,而且生命周期也跟Activity绑定一起.下面我们看 ...

  4. Android Fragment和Activity的交互介绍

    Fragment和Activity的交互 一个Fragment的实例总是和包括它的Activity直接相关. fragment能够通过getActivity() 方法来获得Activity的实例.然后 ...

  5. 深入分析:Fragment与Activity交互的几种方式(一,使用Handler)

    这里我不再详细介绍那写比较常规的方式,例如静态变量,静态方法,持久化,application全局变量,收发广播等等. 首先我们来介绍使用Handler来实现Fragment与Activity 的交互. ...

  6. Fragment与Activity交互(使用接口)

    在Fragment中: 1. // 定义一个回调接口,该Fragment所在Activity需要实现该接口// 该Fragment将通过该接口与它所在的Activity交互 { public void ...

  7. Android Fragment与Activity通讯详解

    与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例. Fragment可 ...

  8. Android fragment 想activity 传送数据

    fragment可以通过定义 fragment的接口的方法来 想activity传送数据: 而activity则是通过实现 fragment的接口来接收fragment的送来的数据: 1.在fragm ...

  9. fragment 与activity通信 Bundle 序列化数据 Serializable

    1.fragment简单套用(静态调用): 新建一个fragment,其xml文件如下: <LinearLayout xmlns:android="http://schemas.and ...

随机推荐

  1. elasticsearch index之Translog

    跟大多数分布式系统一样,es也通过临时写入写操作来保证数据安全.因为lucene索引过程中,数据会首先据缓存在内存中直到达到一个量(文档数或是占用空间大小)才会写入到磁盘.这就会带来一个风险,如果在写 ...

  2. git 回滚到任意版本

    git回滚到任意版本 1.先显示提交的log $ git log -3 commit 4dc08bb8996a6ee02f Author: Mark <xxx@xx.com> Date: ...

  3. Linux下VsFTP和ProFTP用户管理高级技巧 之一

    Linux下VsFTP和ProFTP用户管理高级技巧       FTP服务时互联网上比较古老的一种应用,至今Interner应用面非常广泛,但令管理员头痛不已的是其用户管理,既多且杂,如何解决这一问 ...

  4. BZOJ4712: 洪水(树链剖分维护Dp)

    Description 小A走到一个山脚下,准备给自己造一个小屋.这时候,小A的朋友(op,又叫管理员)打开了创造模式,然后飞到 山顶放了格水.于是小A面前出现了一个瀑布.作为平民的小A只好老实巴交地 ...

  5. Android 上的 制表符(tab) —— 一个奇妙的字符 (二)

    接到上回的说,主要是上回那个问题,我认为是android的bug,黎叔认为是cocos2dx的bug,叫我去提交bug.所以我又继续研究了下. 上回说到会调用java层的函数去创建一个image,然后 ...

  6. Leetcode:signal_number_ii

    一.     题目 给一个数组,当中仅仅有一个数出现一次.其它的数都出现3次,请找出这个数.要求时间复杂度是O(n).空间复杂度O(1). 二.     分析 第一次遇见这种题,真心没思路-.前面的s ...

  7. Impala的安装(含使用CM安装 和 手动安装)(图文详解)

    Impala有两种安装方式: 1)使用CM安装Impala 2)手动安装Impala 注意:Impala不支持在Debian/Ubuntu, SuSE, RHEL/CentOS 6.5系统中安装. 基 ...

  8. Flume的可管理性

    Flume的可管理性  所有agent和Collector由master统一管理,这使得系统便于维护. 多master情况,Flume利用 ZooKeeper和gossip,保证动态配置数据的一致性. ...

  9. BZOJ2160: 拉拉队排练(Manacher)

    Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训 ...

  10. Appium定义接口测试

    1.Appium如何执行 Appium作为一个服务器,python的脚本代码交给Appium服务器,Appium再去与设备交互. desired_cap = {} desired_cap['platf ...