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

一、Activity->Fragment传递数据

1.main.xml:
  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:

  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:

  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:

  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:
 
  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:

  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
 

Android(Fragment和Activity之间通信)的更多相关文章

  1. Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)

    Fragment与Activity之间的数据交换,通常含有3: 一.Fragment从Activity获取数据(仅本文介绍了一个第一): 两.Activity从Fragment获取数据: 三.Frag ...

  2. android中fragment与activity之间通信原理以及例子

    参考文章 http://blog.csdn.net/guozh/article/details/25327685#comments Activity和fragment通信方式一般有3种方法 1.在fr ...

  3. Android Service与Activity之间通信的几种方式

    在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activ ...

  4. Fragment 和 Activity 之间通信

    在 Activity 中获取 Fragment 实例: FragmentManager 提供了一个类似于 findViewById 的方法,专门用于从布局文件中获取 Fragment 实例: //通过 ...

  5. Android Service与Activity之间通信

    主要分为: 通过Binder对象 通过broadcast(广播)的形式 Activity调用bindService (Intent service, ServiceConnection conn, i ...

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

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

  7. Android 笔记-Fragment 与 Activity之间传递数据

    Fragment 与 Activity之间传递数据有两种方法.一种是使用setArgument,一种是使用接口回调.以下先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这 ...

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

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

  9. 安卓Fragment和Activity之间的数据通讯

    Fragment是Android3.0之后才推出来的.可以用来做底部菜单,现在很多APP都有用到这个底部菜单.当然TabHost也可以用来做底部菜单,但是Fragment来做,动画效果这些可以做得更炫 ...

随机推荐

  1. Django_admin源码流程

    admin.py from django.contrib import admin from . import models """ 通过原生的django admin来 ...

  2. 在JAVASCRIPT中构建一个复杂的对象,并用JSON进行转换

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. umount.nfs: device is busy解决办法

    fuser -km /app/nfs/ https://blog.csdn.net/x_i_y_u_e/article/details/42914817

  4. WPF Binding 的顺序问题

    做了一个Win 8 Store APP,其中有一个List Box,从另外一个Page Navigate到这个Page之后,需要自动选中 List Box中的一项. 开始是这么写的 <ListB ...

  5. ngCordova安装配置使用教程

    ngCordova是什么 ngCordova是在Cordova Api基础上封装的一系列开源的AngularJs服务和扩展,让开发者可以方便的在HybridApp开发中调用设备能力,即可以在Angul ...

  6. sql查询总结

    1.SQL select 语句 SELECT 语句用于从表中选取数据. 结果被存储在一个结果表中(称为结果集). SELECT 列名称 FROM 表名称 实例: SELECT username,pas ...

  7. 有一种感动叫ACM(WJMZBMR在成都赛区开幕式上的讲话)

    各位选手,各位教练,大家好,我是来自清华大学交叉信息学院的陈立杰,今天很荣幸站在这里代表全体参赛选手发言.对于我来说,这是我第一次正式参加ACM的比赛.不过我跟ACM之间的缘分,大概在很早的时候就已经 ...

  8. jq函数绑定与解绑

    最近学到几个新的jq函数 1.bind()绑定函数 2.unbind()解绑函数 3.add() .给元素追加字符串 4.addClass() 给某元素增加class属性值

  9. JAX-WS文章汇总

    学习路线图 传送门 最简单的Web Service实现- 这里提供一个最简单的Web Service的实现,基于JAX-WS.除了jdk不需要任何其他jar包,使用Eclipse提供的Web Serv ...

  10. 洛谷——P1529 回家 Bessie Come Home

    P1529 回家 Bessie Come Home 题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出 ...