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. ORM数据库查询操作之基于双下划线的跨表查询

     创建表结构 from django.db import models class Book(models.Model): title=models.CharField(max_length=32) ...

  2. hdu 1325(并查集)

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  3. OpenAcc笔记——update

    program main use omp_lib use openacc implicit none real,allocatable:: v1(:) integer length, idx call ...

  4. json转换工具——fastjson的使用

    1.maven依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson< ...

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

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

  6. AC日记——「SCOI2016」美味 LiBreOJ 2016

    #2016. 「SCOI2016」美味 思路: 主席树: 代码: #include <bits/stdc++.h> using namespace std; #define maxa 26 ...

  7. 前端读者 | 如何判断Javascript对象是否存在

    本文来自@阮一峰 Javascript语言的设计不够严谨,很多地方一不小心就会出错. 举例来说,请考虑以下情况. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.用自然语言 ...

  8. 洛谷——P2799 国王的魔镜

    P2799 国王的魔镜 题目描述 国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的.比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠.如果把 ...

  9. Codeforces Round #165 (Div. 1) Greenhouse Effect(DP)

    Greenhouse Effect time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  10. JavaScript中的Array数组详解

    ECMAScript中的数组与其他多数语言中的数组有着相当大的区别,虽然数组都是数据的有序列表,但是与其他语言不同的是,ECMAScript数组的每一项可以保存任何类型的数据.也就是说,可以用数组的第 ...