activity与fragment之间传递数据
总结:无论是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之间传递数据的更多相关文章
- 两个Fragment之间传递数据
1.第一个Fragment BlankFragment blankFragment = new BlankFragment();Bundle bundle = new Bundle();bundle. ...
- Android 笔记-Fragment 与 Activity之间传递数据
Fragment 与 Activity之间传递数据有两种方法.一种是使用setArgument,一种是使用接口回调.以下先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这 ...
- activity与fragment之间的传递数据
首先activity之间的数据传递就是 用intent和intent+bundle intent 传递 Intent i= new Intent(MainActivity.this,TheAty.cl ...
- Activity之间传递数据的方式及常见问题总结
Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...
- Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口
package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...
- 28、activity之间传递数据&批量传递数据
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android ...
- 【Android 复习】 : Activity之间传递数据的几种方式
在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...
- Android基础知识04—Activity活动之间传递数据
------活动之间传递数据------ 向下一个活动传递数据: Intent中提供了一系列的putExtra()方法,可以把数据暂存到Intent中,启动另一个活动的时候就可以取出来. 代码: (存 ...
- Android Fragment之间传递List数据
要说的是在两个Fragment之间传递List数据,比如有个List<User>,以及传递字符串数据,比如testId,该如何从FragmentA传递到FragmentB呢? 下面这个例子 ...
随机推荐
- BFS_Maze_求解迷宫最短路径
/* 10 10 #.######.# ......#..# .#.##.##.# .#........ ##.##.#### ....#....# .#######.# ....#..... .## ...
- MySqlNDB使用自带的ndb_setup.py安装集群
在用Mysql做集群时,使用Mysql的NDB版本更易于集群的扩展,稳定和数据的实时性. 我们可以使用Mysql自带的工具进行集群安装与管理:ndb_setup.py.位于Mysql的安装目录bin下 ...
- Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现
最近一直搞Dcloud ,这是HTML5版本的开发,打包时候,可以打包成 apk 和ipa 分别运行在安卓和ios 机器上面, 但是这里面的资料很少,遇到问题,之后只能自己钻研总结, 现在有这么一个需 ...
- (转载)Win8.1的版本
Win8.1版本到底有哪些? Windows 8.1的各版本有什么不同.差别和区别? Win8.1旗舰版有木有? Win8.1最好的版本是哪个? 我应该用哪个版本的Windows 8.1? 之前软媒曾 ...
- 【转载】VS2012的打包方法
上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...
- sql基础大全
- 【Hibernate框架】关联映射(多对多关联映射)
按着我们的总结行进计划,接下来,就是有关于多对多映射的总结了. 我们来举个例子啊,很长时间以来,房价暴涨不落,但是还有很多人拥有很多套房产,假如说,一个富豪拥有九套房产,家里人么准去住哪一套,我们就以 ...
- UILAbel 设置了attributedText 后省略号不显示
今天遇见个大坑呀,UILabel我设置了 attributedText ,并且设置了 lineBreakMode = NSLineBreakByTruncatingTail 就是想让多余的内容显示成省 ...
- cant create oci environment
网上这些人真是七里八里呀,下了navicat premium,想连接远程数据库,结果报cant create oci environment. 看了好几篇帖子博客,都说要下一个instantclien ...
- Programming Language A 学习笔记(二)
1. 语法糖--元组的"名称引用"与"位置引用": (e1,...,en) <=> {1=e1,...,n=en} 类型:t1 * - * tn & ...