总结:无论是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. BFS_Maze_求解迷宫最短路径

    /* 10 10 #.######.# ......#..# .#.##.##.# .#........ ##.##.#### ....#....# .#######.# ....#..... .## ...

  2. MySqlNDB使用自带的ndb_setup.py安装集群

    在用Mysql做集群时,使用Mysql的NDB版本更易于集群的扩展,稳定和数据的实时性. 我们可以使用Mysql自带的工具进行集群安装与管理:ndb_setup.py.位于Mysql的安装目录bin下 ...

  3. Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现

    最近一直搞Dcloud ,这是HTML5版本的开发,打包时候,可以打包成 apk 和ipa 分别运行在安卓和ios 机器上面, 但是这里面的资料很少,遇到问题,之后只能自己钻研总结, 现在有这么一个需 ...

  4. (转载)Win8.1的版本

    Win8.1版本到底有哪些? Windows 8.1的各版本有什么不同.差别和区别? Win8.1旗舰版有木有? Win8.1最好的版本是哪个? 我应该用哪个版本的Windows 8.1? 之前软媒曾 ...

  5. 【转载】VS2012的打包方法

    上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...

  6. sql基础大全

  7. 【Hibernate框架】关联映射(多对多关联映射)

    按着我们的总结行进计划,接下来,就是有关于多对多映射的总结了. 我们来举个例子啊,很长时间以来,房价暴涨不落,但是还有很多人拥有很多套房产,假如说,一个富豪拥有九套房产,家里人么准去住哪一套,我们就以 ...

  8. UILAbel 设置了attributedText 后省略号不显示

    今天遇见个大坑呀,UILabel我设置了 attributedText ,并且设置了 lineBreakMode = NSLineBreakByTruncatingTail 就是想让多余的内容显示成省 ...

  9. cant create oci environment

    网上这些人真是七里八里呀,下了navicat premium,想连接远程数据库,结果报cant create oci environment. 看了好几篇帖子博客,都说要下一个instantclien ...

  10. Programming Language A 学习笔记(二)

    1. 语法糖--元组的"名称引用"与"位置引用": (e1,...,en) <=> {1=e1,...,n=en} 类型:t1 * - * tn & ...