上一篇文章简单介绍了Android的回调机制的使用,这一篇博文将重点介绍Fragment碎片与activity的数据交互,fragment在Android开发中起着至关重要的作用,通过官方Android api我们可以看到,fragment有着自己的生命周期并依赖于它绑定的activity的生命周期而存在,那样activity与fragment怎样进行数据交互呢,请看此篇博文。

MainActiivity的代码

package com.example.f08_fragment03;import com.example.f08_fragment03.Fragment02.Callback;import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;public class MainActivity extends Activity {private FragmentManager manager;// 创建fragment管理private FragmentTransaction transaction;// 创建fragment的事物private EditText editText;private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editText = (EditText) this.findViewById(R.id.editText2);button = (Button) this.findViewById(R.id.button1);manager = getFragmentManager();transaction = manager.beginTransaction();final Fragment02 fragment02 = new Fragment02();transaction.add(R.id.left, fragment02, "left");transaction.commit();// 不管要实现怎样的功能都必须调用以下三个方法// manager=getFragmentManager();//transaction=manager.beginTransaction();// transaction.commit();提交数据button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub//通过callback机制得到fragment的数据fragment02.getString(new Callback() {@Overridepublic void getString(String msg) {// TODO Auto-generated method stubeditText.setText(msg);}});}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

Fragment02的代码

package com.example.f08_fragment03;import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;public class Fragment02 extends Fragment {private Button button;private EditText editText;@Overridepublic void onAttach(Activity activity) {// TODO Auto-generated method stubsuper.onAttach(activity);}@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);}// 在该方法中更新UI@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubView view = inflater.inflate(R.layout.left, null);button = (Button) view.findViewById(R.id.button1);editText = (EditText) view.findViewById(R.id.editText1);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {//通过getActivity方法得到activity的控件,以此可以得到数据EditText eText = (EditText) getActivity().findViewById(R.id.editText2);Log.i("info", "------->" + eText.getText().toString());editText.setText(eText.getText().toString());}});return view;}@Overridepublic void onStart() {// TODO Auto-generated method stubsuper.onStart();}@Overridepublic void onResume() {// TODO Auto-generated method stubsuper.onResume();}@Overridepublic void onPause() {// TODO Auto-generated method stubsuper.onPause();}//实现数据传递public void getString(Callback callback) {String msg = editText.getText().toString();callback.getString(msg);}//创建接口public interface Callback {public void getString(String msg);}}

main的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><LinearLayoutandroid:id="@+id/left"android:layout_width="200dp"android:layout_height="match_parent"android:background="#cbcbcb"android:orientation="vertical" ></LinearLayout><LinearLayoutandroid:id="@+id/right"android:layout_width="200dp"android:layout_height="match_parent"android:orientation="vertical" ></LinearLayout><EditTextandroid:id="@+id/editText2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_marginTop="14dp"android:layout_toRightOf="@+id/left"android:ems="10"android:inputType="textPassword" ><requestFocus /></EditText><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/editText2"android:layout_toRightOf="@+id/left"android:text="得到Fragment的数据" /></RelativeLayout>

fragment的xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><EditTextandroid:id="@+id/editText1"android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="text"android:ems="10" ><requestFocus /></EditText><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="得到Activity的数据" /></LinearLayout>

这样就大功告成了,点击fragment的button就可以在其editText控件显示activity的editText控件的文字,点击activity的button就可以得到fragment的编辑控件的数据!

Android开发之Fragment与Activity的数据交互通过回调机制实现(源代码分享)相关推荐

  1. Android开发之Service与Activity数据交互(源代码分享)

    Service想要与Activity进行数据交互,首先Activity先得绑定Service.bound service是service 的实现,它允许其他应用程序绑定到它并与之交互.要提供bound ...

  2. Android开发之WebView加载html数据去除Webview滚动条的方法

    老套路看图: 这是通过webview加载HTML源码显示的网页:加载方法如下: webview.loadDataWithBaseURL(null, htmlData, "text/html& ...

  3. Android开发之fragment之replace用法

    我们先来写个接口: package com.xiayiye.yhsh.fragmentreplace;import android.os.Bundle;/*** @author :下一页5(轻飞扬)* ...

  4. Android开发之fragment传递参数的两种方法

    非常简单一种是通过bundle,另外一种是通过fragment提供的instantiate(过时方法),都是kotlin版本,直接上代码吧: 方法一: //fragment传递参数方法一val fra ...

  5. Android开发之Java基础JVM和ClassLoader以及类加机制面试题

    在面试中被问到Java相关的东西非常多: 首先说下Java内存模型: 主要由: 程序计数器,Java虚拟机栈,本地方法栈=>被线程私有 方法区 堆组成=>被线程共有 Java类加载机制Cl ...

  6. android布局黑色字体颜色,Android开发之FloatingActionButton悬浮按钮基本使用、字体、颜色用法示例...

    本文实例讲述了Android开发之FloatingActionButton悬浮按钮基本使用.字体.颜色用法.分享给大家供大家参考,具体如下: 这里主要讲: FloatingActionsMenu自定义 ...

  7. Android studio实现底部导航,Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果...

    BottomBar BottomBar是Github上的一个开源框架,因为从1.3.3开始不支持fragments了,要自己配置,弄了很久,不管是app的fragment还是V4 的程序总是总是闪退. ...

  8. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

    今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可以 ...

  9. Android透明到白色滑动渐变,Android开发之Activity全透明渐变切换方法

    Activity全透明渐变切换 类似于Dialog的显示动画效果一样 1. 先设置Acitivity为去透明,在取消掉Activity默认的切换动画 true @color/colorPrimary ...

最新文章

  1. TCP服务器:多进程
  2. [.net 面向对象编程基础] (13) 面向对象三大特性——多态
  3. 第三章 可扩展标记语言XML
  4. java 实现长链接Comet
  5. js的parseInt函数结果为0很奇怪的问题
  6. 来了!华为首款5G双模手机Mate 20 X (5G)发布:这个价格香吗?
  7. AndroidManifest.xml详解(service)
  8. Window操作系统安全配置
  9. 如何升级maven版本
  10. Jvm面试题总结及答案 300道(2022年最新版 )
  11. 机器学习-算法原理与编程实践(郑捷.著)-阅读笔记
  12. 网路营销seo站群策略
  13. 千兆级LTE奏响序曲 5G可款款来矣
  14. 解决Edge浏览器下载速度慢的问题:
  15. IoT开发——WIFI模块ESP8266 RTOS SDK V3.0.0环境搭建
  16. 商务与经济统计阅读笔记3
  17. 学计算机前后对比的图片,大学生“修图前后”对比照,差距一目了然,男生帅气女生惊艳...
  18. 计算机如何实现开根号?
  19. 到阿德莱德读计算机博士值吗,留学问多点-阿德莱德大学博士申请难吗?有哪些条件?...
  20. HTML5开发APP页面(动效篇)

热门文章

  1. mysql星火_mysql的执行计划
  2. 大数据druid查询不支持分页_Druid实时大数据分析查询(六)
  3. linux18.04安装显卡驱动,详细介绍ubuntu18.04安装NVIDIA显卡驱动(亲测有效!)
  4. PythonNET网络编程3
  5. Java面试笔试题大汇总三(最全+详细答案)
  6. 利用WSS搭建学生作业平台
  7. 高通的专利霸权要到头了?
  8. html5中的新标签
  9. 一款基于jquery和css3的头像恶搞特效
  10. Cisco Easy ***综合配置示例