Android_Fragment和Activity之间的通信
Fragment 的生命周期是随着activity变化而变化的。
如果activity要给在运行的时候给fragment传人数据则需要fragment实现一个自定义的接口,并且实现接口里面的方法,在activity里面保存这个接口并且在需要传人数据的时候调用这个方法即可。
如果fragment运行的时候需要给activity传数据了?activity先实现这个接口,然后在fragment里面重写onAttach(Activity act)这个方法,并在这个方法里面讲activity强制转换为接口类,然后在fragment使用的时候调用这个接口类的方法。
请看下面的例子:
activity给fragment里面传人数据:
public class MainActivity extends Activity{
private TestFragment fragment;//fragment
private UpdateFragment updateFragment;//fragment实现的接口
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
initView();
}
private void initView() {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragment = new TestFragment();
updateFragment = fragment;
fragmentTransaction.add(R.id.main, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commitAllowingStateLoss();
}
@Override
protected void onResume() {
//改变fragment里面textView的值
updateFragment.setData("王五");
super.onResume();
}
}
接口类
public interface UpdateFragment {
void setData(String str);
}
Fragment类:
public class TestFragment extends Fragment implements UpdateFragment{
private View view;
private TextView txt;
public TestFragment() {
super();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (null == view){
view = inflater.inflate(R.layout.activity_main, container, false);
txt = (TextView)view.findViewById(R.id.tv);
}
return view;
}
@Override
public void setData(String str) {
if (null != txt) {
txt.setText(str);
}
}
}
Fragment给activity传入数据demo:
Activity类:
public class MainActivity extends Activity implements UpdateFragment{
private static final String TAG = MainActivity.class.getSimpleName();
private TestFragment fragment;//fragment
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
initView();
}
private void initView() {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragment = new TestFragment();
fragmentTransaction.add(R.id.main, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commitAllowingStateLoss();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void setData(String str) {
if (null != str ){
Log.d(TAG, "setData:"+str);
}
}
接口类和上面的是一样的就不写了
Fragment类:
public class TestFragment extends Fragment{
private View view;
private TextView txt;
private Button btn;
private UpdateFragment updateFragment;
public TestFragment() {
super();
}
@Override
public void onAttach(Activity activity) {
try {
updateFragment = (UpdateFragment)activity;
} catch (Exception e) {
e.printStackTrace();
}
super.onAttach(activity);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (null == view){
view = inflater.inflate(R.layout.activity_main, container, false);
txt = (TextView)view.findViewById(R.id.tv);
btn = (Button)view.findViewById(R.id.btn);
btn.setOnClickListener(clickListener);
}
return view;
}
private OnClickListener clickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (null != txt) {
updateFragment.setData(txt.getText().toString());
}
}
};
}
Android_Fragment和Activity之间的通信的更多相关文章
- Activity之间的通信
通常Activity之间的通信有三种方式:单向不传参数通信.单项传参数通信和双向通信. 这几种传递方式都需要通信使者Intent.以下将用代码来辅助理解. 1.单向不传递参数通信 public cla ...
- Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Fragment的生命周期和Activity之间的通信以及使用
Fragment通俗来讲就是碎片,不能单独存在,意思就是说必须依附于Activity,一般来说有两种方式把Fragment加到Activity,分为静态,动态. 静态即为右键单击,建立一个Fragme ...
- Android中BroadCast与Activity之间的通信
在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...
- Fragmen和Activity之间的通信--接口和实现的分离(转)
Fragmen和Activity之间的通信--接口和实现的分离(转) 分类: Android平台 在平板的开发过程中通常都会采用多个Fragment的实现方式,通常有一个为list的Fragm ...
- 【Android 应用开发】Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- Android中两个Activity之间简单通信
在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...
- Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- 适配器(adapter)与fragment之间、fragment与activity之间的通信问题
一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...
随机推荐
- ES6 Generator 异步编程解决方案&&&promise
Generator: 是比promise更高级的解决方案 next yield function 后加* 状态机 generator语法糖 长轮询 接口常查询 ================= ...
- echart.js在vue中使用
以前可能写过,懒得去翻了,再写一次 1,安装echarts 导入到页面 import echarts from 'echarts'; 2.在生命周期里面做初始化 data(){ return{ t ...
- centos 7 安装redis 3.2.1
https://www.cnblogs.com/zuidongfeng/p/8032505.html 下载安装包: http://download.redis.io/releases/ 根据需要自己选 ...
- 三 分析easyswoole源码(启动服务&TableManager,略提及Cache工具的原理)
前文连接,讲了es是如何启动swoole服务的. 里面有一个工具类TableManager.这个类为了处理进程间数据共享.是对swoole_table的一层封装swoole_table一个基于共享内存 ...
- Python3实战系列之九(获取印度售后数据项目)
项目现状:已经部署在服务器上并正常运行了. 1.服务器上的部署 2.下载到服务器的文件列表 3.转存在到数据库SQL Server中的数据 项目总结:这次项目采用python来实现,刚开始还是有点担忧 ...
- Python3实战系列之八(获取印度售后数据项目)
问题:续接上一篇.说干咱就干呀,勤勤恳恳写程序呀! 目标:此篇开始进入正题了.为实现我们整个项目功能而开始实现各个子模块功能.首先实现第一篇列出的分步功能模块的第五步: 5.python连接SQL S ...
- MD5盐值加密
加密思路 思路解析:(数据解析过程基于16进制来处理的,加密后为16进制字符串) 加密阶段: 对一个字符串进行MD5加密,我们需要使用到MessageDigest(消息摘要对象),需要一个盐值(sal ...
- mysql data type <----> java data type (数值)
https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html +----------------------------+---- ...
- ubuntu 配置jdk报错解决办法
vi /etc/profile ,添加如下代码 export JAVA_HOME=/home/mark/android/jdk1.8 export JRE_HOME=/home/mark/androi ...
- elasticsearch 安装,以及遇到的问题总结
系统.软件环境: Centos 6.5 elasticsearch 6.1.1 elasticsearch 安装的话是很简单的,但是安装完成启动的时候报错,下面我就一一的来描述错误,并提供相应的解决方 ...