总结:无论是activity给fragment传递数据,还是fragment给activity传递数据,都把activity和fragment都当做一个普通的对象,调用它的方法,传递参数。

1.Fragment中通过getActivity()然后进行强制转化,调用Activity中的公有方法

((XXXXActivity)getActivity()).fun();

2.Activity在切换Fragment的时候,通过setArguments向Fragment传递参数,Fragment通过getArguments();获得从activity中传递过来的值

实例界面:(此Demo演示了activity给fragment传递数据和fragment给activity传递数据)

代码如下:

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<LinearLayout
android:layout_width="120dip"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/tv_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Activity界面"
android:textSize="18sp" />

<Button
android:layout_width="120dip"
android:layout_height="wrap_content"
android:onClick="open01"
android:text="fragment01" />

<EditText
android:id="@+id/et_data"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:hint="请输入数据" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="submit"
android:text="提交" />
</LinearLayout>

<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#ff000f" />

<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>

</LinearLayout>

----------------------------------------------------------------------------------------------------------------

f01.xml

<?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:background="#00ffff"
android:orientation="vertical" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Frgment01界面"
android:textSize="18sp" />

<TextView
android:id="@+id/tv_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp" />

<EditText
android:id="@+id/et_info"
android:layout_width="150dip"
android:layout_height="wrap_content"
android:hint="请输入信息" />

<Button
android:id="@+id/btn_info"
android:layout_width="150dip"
android:layout_height="wrap_content"
android:text="传递" />

</LinearLayout>

------------------------------------------------------------------------------------------------------

MainActivity.java

package com.example.fragment;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends FragmentActivity {

private Fragment01 f01;
private FragmentManager fm;
private EditText et_data;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

et_data = (EditText) findViewById(R.id.et_data);

f01 = new Fragment01();

// 得到fragment的管理器,可以得到fragment的事务管理器
fm = this.getSupportFragmentManager();

open01(null);
}

public void open01(View view) {

// Fragment01 f01= new Fragment01();

// 得到fragment的事务管理器,可以填充fragment的界面
// 事务可以保证加载的多个fragment要么同时显示成功要么同时显示失败
FragmentTransaction ft = fm.beginTransaction();
// 把f01显示在framelayout界面中
ft.replace(R.id.fl_container, f01);
// 提交事务
ft.commit();
}

// Activity传递数据给fragment
public void submit(View v) {
// 传递数据给fragment01界面
String data = et_data.getText().toString().trim();
// 把data传给fragment01
// 把fragment01作为一个普通的对象,调用它的方法传递参数
// Fragment01 f01 = new Fragment01();
// activity中设置数据,对应fragment有获取数据的方法。
f01.setData(data);
}

// 获取fragment传递过来的数据。
public void setInfo(String info) {
et_data.setText(info);

}

}

-----------------------------------------------------------------------------------------------

fragment01.xml

package com.example.fragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Fragment01 extends Fragment {

private View view;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 加载布局文件
// getActivity() fragment所运行在的activity
// resource fragment的布局文件资源ID
// root 父级控件,通常使用null

view = View.inflate(getActivity(), R.layout.f01, null);

// 从view中找到按钮
Button btn_info = (Button) view.findViewById(R.id.btn_info);
btn_info.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

EditText et_info = (EditText) view.findViewById(R.id.et_info);
String info = et_info.getText().toString().trim();
// 把MainActivity作为一个普通的对象,调用它的方法传递参数
FragmentActivity activity = getActivity();
// 判断activity是否是MainActivity类型的
if (activity instanceof MainActivity) {
MainActivity mainActivity = (MainActivity) activity;
// 调用activity的方法传递参数
mainActivity.setInfo(info);
}

}
});
return view;
}

// fragment传递数据给activity
public void setData(String data) {
TextView tv_data = (TextView) view.findViewById(R.id.tv_data);
tv_data.setText(data);

}

}

activity与fragment之间传递数据的更多相关文章

  1. 两个Fragment之间传递数据

    1.第一个Fragment BlankFragment blankFragment = new BlankFragment();Bundle bundle = new Bundle();bundle. ...

  2. Android 笔记-Fragment 与 Activity之间传递数据

    Fragment 与 Activity之间传递数据有两种方法.一种是使用setArgument,一种是使用接口回调.以下先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这 ...

  3. activity与fragment之间的传递数据

    首先activity之间的数据传递就是 用intent和intent+bundle intent 传递 Intent i= new Intent(MainActivity.this,TheAty.cl ...

  4. Activity之间传递数据的方式及常见问题总结

    Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...

  5. Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口

    package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...

  6. 28、activity之间传递数据&批量传递数据

    import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android ...

  7. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

  8. Android基础知识04—Activity活动之间传递数据

    ------活动之间传递数据------ 向下一个活动传递数据: Intent中提供了一系列的putExtra()方法,可以把数据暂存到Intent中,启动另一个活动的时候就可以取出来. 代码: (存 ...

  9. Android Fragment之间传递List数据

    要说的是在两个Fragment之间传递List数据,比如有个List<User>,以及传递字符串数据,比如testId,该如何从FragmentA传递到FragmentB呢? 下面这个例子 ...

随机推荐

  1. iOS 微信支付总结

    1.支付流程 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3 商户系统和微信支付系统主要交互说明: 步骤1:用户在商户APP中选择 ...

  2. JS string 截取

    subStubstring(a,b); a:开始索引 b:结束索引 subStr(c,d) c:开始索引 d:截取数量.

  3. Delphi的Trim函数

    三个Trim函数简介 函数原型 function Trim(const S: string): string; 将字符串前后的空白及控制字元清掉. 注意Trim函数只能清掉字符串前后的空格及控制字元, ...

  4. 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)

    信鸽推送 .NET  服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...

  5. 高性能的JavaScript--加载和执行

    写在前面 JavaScript在浏览器中的性能,可认为是开发者所要面对的最重要的可用性的问题,此问题因JavaScript的阻塞特征而复杂,也就是说JavaScript运行时其他的事情不能被浏览器处理 ...

  6. CommonJS, AMD 和 RequireJS之间的关系(转载)

    先说说CommonJS CommonJS - 大家是不是觉得JavaScript仅仅是一个客户端的编译语言,其实JavaScript设计之初不仅仅是针对客户端设计的语言.后来只是由于Web的迅速流行, ...

  7. 关于Solr的使用总结的心得体会

    摘要:在项目中使用Solr作为搜索引擎对大数据量创建索引,提供服务,本文是作者对Solr的使用总结的一点心得体会, 具体包括使用DataImportHandler从数据库中近实时同步数据.测试Solr ...

  8. Future和Promise

    Future用于获取异步操作的结果,而Promise则比较抽象,无法直接猜测出其功能. Future Future最早来源于JDK的java.util.concurrent.Future,它用于代表异 ...

  9. Trigger和ViewStateManager的具体比较

    ViewStateManager的好处  拥有 GeneratedDuration ,可以很方便的进行几个状态之间的切换过渡动画. 坏处是,在界面加载时只能显示默认效果,通过GoToStateActi ...

  10. JQUERY UI Datepicker Demo

    datepicker_demo.htm <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &quo ...