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之间的通信的更多相关文章

  1. Activity之间的通信

    通常Activity之间的通信有三种方式:单向不传参数通信.单项传参数通信和双向通信. 这几种传递方式都需要通信使者Intent.以下将用代码来辅助理解. 1.单向不传递参数通信 public cla ...

  2. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  3. Fragment的生命周期和Activity之间的通信以及使用

    Fragment通俗来讲就是碎片,不能单独存在,意思就是说必须依附于Activity,一般来说有两种方式把Fragment加到Activity,分为静态,动态. 静态即为右键单击,建立一个Fragme ...

  4. Android中BroadCast与Activity之间的通信

    在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...

  5. Fragmen和Activity之间的通信--接口和实现的分离(转)

    Fragmen和Activity之间的通信--接口和实现的分离(转) 分类: Android平台     在平板的开发过程中通常都会采用多个Fragment的实现方式,通常有一个为list的Fragm ...

  6. 【Android 应用开发】Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  7. Android中两个Activity之间简单通信

    在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...

  8. Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  9. 适配器(adapter)与fragment之间、fragment与activity之间的通信问题

    一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...

随机推荐

  1. SpringMVC不能引入静态资源

    SpringMVC不能引入静态资源 问题:部署项目后程序加载或用浏览器访问时出现类似的警告, 2011-01-19 10:52:51,646 WARN [org.springframework.web ...

  2. AC自动机——1 Trie树(字典树)介绍

    AC自动机——1 Trie树(字典树)介绍 2013年10月15日 23:56:45 阅读数:2375 之前,我们介绍了Kmp算法,其实,他就是一种单模式匹配.当要检查一篇文章中是否有某些敏感词,这其 ...

  3. Python3实战系列之七(获取印度售后数据项目)

    问题:续接上一篇.说干咱就干呀,勤勤恳恳写程序呀! 目标:此篇开始进入正题了.为实现我们整个项目功能而开始实现各个子模块功能.首先实现第一篇列出的分步功能模块的第四步: 4.python读取excel ...

  4. 小白的CTF学习之路1——程序与CPU

    刚刚注册了这个博客园,尽量保持每日一更(*/ω\*) 今天看了po学院的教学视频,了解了程序是什么,如何在CPU当中工作的等各种之前未曾想过的问题,特此记录,以防忘记 首先我们学习程序与CPU之前需要 ...

  5. 叙述 activemq 与spring 主题实现 小功能实现

    在上一篇文章里 我说到了 maven的配置  我现在直接说 xml配置 首先我先描述 生产者的信息 <?xml version="1.0" encoding="UT ...

  6. NAT 模式下虚拟机安装的centos7 ping主机显示connect: Network is unreachable

    在虚拟机下安装的centos7使用的网络是NAT模式,安装成功后ping主机地址显示 Network is unreachable 解决方案: 1)使用ifconfig命令查看网卡信息 2)进入/et ...

  7. windows下angularJs环境搭建和遇到的问题解决

    搭建本地开发环境 angular官网社区上说:你应该在自己的电脑上本地开发... 你也应该在本地环境学习 Angular. 本人也认为在本地搭建学习环境--靠谱.所以决定尝试一下. 安照中文社区给的步 ...

  8. 桌面应用开发之WPF动态背景

      因为项目需要,在WPF开发的桌面应用中,登陆页面需使用动态背景.由于没有前端开发人员,所以由半吊子的后端开发人员根据效果图写前端xaml.去掉页面上边框,抽离动态背景设置代码: <Windo ...

  9. iOS 10 应用内跳转到系统设置

    在iOS开发中,有时会有跳转系统设置界面的需求,例如提示用户打开蓝牙或者WIFI,提醒用户打开推送或者位置权限等.在iOS6之后,第三方应用需要跳转系统设置界面,需要在URL type中添加一个pre ...

  10. Thinking in Java Chapter 14

    From Thinking in Java 4th Edition RTTI(Run-Time Type Information),运行时类型信息,使得你可以在程序运行时发现和使用类型信息.对RTTI ...