Fragment的使用可以让我们的应用更灵活的适配各种型号的安卓设备,但是对于Fragment和Activity之间的通信,很多朋友应该比较陌生,下面我们就通过一个实例来看一看如何实现。

一、Activity->Fragment传递数据

1.main.xml:
[html] view plaincopy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:id="@+id/rl_fragment"
  5. android:orientation="vertical"
  6. android:layout_height="match_parent" >
  7. <EditText
  8. android:id="@+id/et_input"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content" />
  11. <Button
  12. android:id="@+id/btn_send"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:text="发送" />
  16. </LinearLayout>

2.fragment.xml:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:id="@+id/tv_fragment"
  8. android:layout_height="wrap_content"
  9. android:layout_width="wrap_content"
  10. />
  11. </LinearLayout>

3.MainActivity.java:

[java] view plaincopy
  1. package com.example.fragementcommunication;
  2. import android.app.Activity;
  3. import android.app.FragmentManager;
  4. import android.app.FragmentTransaction;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.view.Window;
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11. import android.widget.Toast;
  12. public class MainActivity extends Activity {
  13. private EditText mMainActivityET;
  14. private Button mSendButton;
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. requestWindowFeature(Window.FEATURE_NO_TITLE);
  19. setContentView(R.layout.activity_main);
  20. mMainActivityET = (EditText) findViewById(R.id.et_input);
  21. mSendButton = (Button) findViewById(R.id.btn_send);
  22. mSendButton.setOnClickListener(new OnClickListener() {
  23. @Override
  24. public void onClick(View v) {
  25. String text = mMainActivityET.getText().toString();
  26. MyFragment myFragment = new MyFragment();
  27. Bundle bundle = new Bundle();
  28. bundle.putString("input", text);
  29. myFragment.setArguments(bundle);// 传递string
  30. FragmentManager manager = getFragmentManager();
  31. FragmentTransaction transaction = manager.beginTransaction();
  32. transaction.add(R.id.rl_fragment, myFragment, "myfragment");
  33. transaction.commit();
  34. Toast.makeText(MainActivity.this, "向Fragment发送数据" + text, Toast.LENGTH_SHORT).show();
  35. }
  36. });
  37. }
  38. }

4.MyFragment.java:

[java] view plaincopy
  1. package com.example.fragementcommunication;
  2. import android.app.Fragment;
  3. import android.os.Bundle;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.TextView;
  8. import android.widget.Toast;
  9. public class MyFragment extends Fragment {
  10. @Override
  11. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  12. View view = inflater.inflate(R.layout.fragmet, null);
  13. TextView mFragmentTextView = (TextView) view.findViewById(R.id.tv_fragment);
  14. String string = getArguments().getString("input");// 获取数据;
  15. mFragmentTextView.setText(string);
  16. Toast.makeText(getActivity(), "成功获取数据" + string, Toast.LENGTH_SHORT).show();
  17. return view;
  18. }
  19. }

总结:发送数据方法->setArguments(bundle)

接收数据方法->getArguments()
下面我们看一下效果:

二、Fragment向Activity传值(接口回调的方式)

布局文件和上面一样,我们看一下java代码的改变:
1.MainActivity.java:
[java] view plaincopy
  1. package com.example.fragementcommunication;
  2. import com.example.fragementcommunication.MyFragment.MyListener;
  3. import android.app.Activity;
  4. import android.app.FragmentManager;
  5. import android.app.FragmentTransaction;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.view.Window;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. import android.widget.Toast;
  13. public class MainActivity extends Activity implements MyListener{
  14. private EditText mMainActivityET;
  15. private Button mSendButton;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. requestWindowFeature(Window.FEATURE_NO_TITLE);
  20. setContentView(R.layout.activity_main);
  21. mMainActivityET = (EditText) findViewById(R.id.et_input);
  22. mSendButton = (Button) findViewById(R.id.btn_send);
  23. mSendButton.setOnClickListener(new OnClickListener() {
  24. @Override
  25. public void onClick(View v) {
  26. String text = mMainActivityET.getText().toString();
  27. MyFragment myFragment = new MyFragment();
  28. Bundle bundle = new Bundle();
  29. bundle.putString("input", text);
  30. myFragment.setArguments(bundle);// 传递string
  31. FragmentManager manager = getFragmentManager();
  32. FragmentTransaction transaction = manager.beginTransaction();
  33. transaction.add(R.id.rl_fragment, myFragment, "myfragment");
  34. transaction.commit();
  35. Toast.makeText(MainActivity.this, "向Fragment发送数据" + text, Toast.LENGTH_SHORT).show();
  36. }
  37. });
  38. }
  39. @Override
  40. public void callback(String back) {
  41. Toast.makeText(MainActivity.this, "获取到从Fragment中传来的数据" + back, Toast.LENGTH_SHORT).show();
  42. }
  43. }

2.MyFragment.java:

[java] view plaincopy
  1. package com.example.fragementcommunication;
  2. import android.app.Activity;
  3. import android.app.Fragment;
  4. import android.os.Bundle;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.TextView;
  9. import android.widget.Toast;
  10. public class MyFragment extends Fragment {
  11. public MyListener listener;
  12. private String back="已经接收到数据!谢谢";
  13. /**
  14. * 通过接口回调的方式从Fragment向activity传值;
  15. * @author Administrator
  16. *
  17. */
  18. public interface MyListener{
  19. public void callback(String back);
  20. }
  21. @Override
  22. public void onAttach(Activity activity) {
  23. super.onAttach(activity);
  24. listener=(MyListener) activity;
  25. }
  26. @Override
  27. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  28. View view = inflater.inflate(R.layout.fragmet, null);
  29. TextView mFragmentTextView = (TextView) view.findViewById(R.id.tv_fragment);
  30. String string = getArguments().getString("input");// 获取数据;
  31. mFragmentTextView.setText(string);
  32. Toast.makeText(getActivity(), "成功获取数据" + string, Toast.LENGTH_SHORT).show();
  33. Toast.makeText(getActivity(), "向Activity传递数据" + back, Toast.LENGTH_SHORT).show();
  34. listener.callback(back);
  35. return view;
  36. }
  37. }

运行如下:

这时我们可以看到先是MainActivity向Fragment传递了123,然后Fragment向Activity传递了”已经接收到数据!谢谢“。
转自:http://blog.csdn.net/yayun0516/article/details/48210953

转载于:https://www.cnblogs.com/gao-chun/p/4837855.html

Android(Fragment和Activity之间通信)相关推荐

  1. Android Fragment和Activity之间的交互方式

    Android应用主要的UI框架:TabLayout+ViewPager+Fragment组合方式+宿主Activity 在这样的框架之下,就会涉及到很多控件的交互,fragment与activity ...

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

    [正文] 一.接口回调的简单引入: 我们先来看一个简单的接口回调的例子: 新建一个Java工程,然后新建一个包.然后新建一个A.java文件: A.java代码如下: 1 package com.cn ...

  3. android php 实时通信,Android_Android实现Activity之间通信的方法,本文实例讲述了Android实现Activi - phpStudy...

    Android实现Activity之间通信的方法 本文实例讲述了Android实现Activity之间通信的方法.分享给大家供大家参考.具体如下: 在一个Activity中可以使用系统提供的start ...

  4. (转载) Android两个子线程之间通信

    Android两个子线程之间通信 标签: classthreadandroid子线程通信 2015-03-20 17:03 3239人阅读 评论(0) 收藏 举报  分类: 个人杂谈 版权声明:本文为 ...

  5. 静态注册fragment_Fragment的静态和动态添加方式以及Fragment和Activity之间的通信方式...

    一.静态添加方式:创建好Fragment之后,在需要使用碎片的Activity的布局文件中添加 标签. 二.动态添加方式:先创建好fragment的布局文件,然后创建一个继承自Fragment的 类( ...

  6. fragment与activity之间的信息传递的两种方式

    因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常. fragment与activity之间的信息传递的两种方式: 1.第一种方式,也是最常用的方 ...

  7. Fragment与Activity之间的相互通信

    https://blog.csdn.net/u012702547/article/details/49786417 https://blog.csdn.net/carson_ho/article/de ...

  8. Android开发之旅-Fragment和Activity之间onCreateOptionsMenu的联系

    Fragment和Activity一样,可以重写onCreateOptionsMenu方法来设定自己的菜单,其实这两个地方使用onCreateOptionsMenu的目的和效果都是完全一样的,但是由于 ...

  9. Fragment与Activity之间的完美邂逅

    Fragment Activity 看下我实现的效果图这种真的特别常见点击左边的item替换右边的布局文件 MovieContent package view.zm.com.wyimtest.bean ...

最新文章

  1. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)
  2. 2021年Python十佳ML库大盘点,国产选手GitHub半年获5k+star,第一名是升级版NumPy
  3. 恢复Reflector反编译后资源文件的办法
  4. 关于Promise.all()的理解
  5. 08.LoT.UI 前后台通用框架分解系列之——多样的Tag选择器
  6. 再见了古诺。 你好Drools工作台。
  7. 使用adb调试android
  8. mysql-演练0722
  9. 超给力,抛弃手动维护,一键生成数据库文档、支持多种格式!
  10. java 双等于 equals_在Java中等于equals vs Arrays.equals
  11. java中怎样任意跳转到指定行而不受循环语句限制
  12. 学院后勤报修系统php_企业智能故障报修系统,助你轻松解决设备维修难题
  13. 固高控制卡学习(vs2010,c++)(之一)
  14. 软件测试简历项目经验怎么写,没有项目经验?
  15. vscode自动快捷格式化代码_vscode格式化代码快捷键_解锁格式化的快捷键
  16. 【基金量化研究系列】大类资产配置研究(四)——基于马科维茨模型的资产配置研究
  17. Picture Flash(图片放映)
  18. 12面魔方公式图解法_三阶魔方公式符号图解V2.0(2017/12/15)_碧海风云
  19. 异星工厂服务器无响应,异星工厂无法联机解决方法 异星工厂无法联机怎么办...
  20. 小功能⭐️Unity动态更改 Scripting Define Symbols (宏定义)

热门文章

  1. OpenCV3学习(8.2)直方图相似度比较compareHist函数与EMD距离
  2. 7-234 两个有序序列的中位数 (25 分)
  3. 向Docker容器中导入sql文件
  4. 软件工程—个人作业(8)
  5. 创建 SSH Keys
  6. VS2017设置背景主题
  7. 微信生态圈盈­利模式分析
  8. JSON-JSON 百科
  9. 工作不能混日子,给自己留言
  10. 昨日购买了华为U8800+。晒联通2.2版系统与官方2.3版系统的评测跑分。