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

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

MainActiivity的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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;
 
    @Override
    protected 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() {
 
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                //通过callback机制得到fragment的数据
                fragment02.getString(new Callback() {
 
                    @Override
                    public void getString(String msg) {
                        // TODO Auto-generated method stub
                        editText.setText(msg);
                    }
                });
            }
        });
    }
 
    @Override
    public 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的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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;
 
    @Override
    public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        super.onAttach(activity);
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }
 
    // 在该方法中更新UI
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
 
        View 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() {
 
            @Override
            public 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;
    }
 
    @Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
    }
 
    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
    }
 
    @Override
    public void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
    }
    //实现数据传递
    public void getString(Callback callback) {
        String msg = editText.getText().toString();
        callback.getString(msg);
    }
    //创建接口
    public interface Callback {
        public void getString(String msg);
    }
 
}

main的xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<relativelayout tools:context=".MainActivity" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
 
    <linearlayout android:id="@+id/left" android:layout_height="match_parent" android:layout_width="200dp" android:orientation="vertical" android:background="#cbcbcb">
    </linearlayout>
 
    <linearlayout android:id="@+id/right" android:layout_height="match_parent" android:layout_width="200dp" android:orientation="vertical">
         
         
    </linearlayout>
 
    <edittext android:id="@+id/editText2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:inputtype="textPassword" android:ems="10" android:layout_torightof="@+id/left" android:layout_margintop="14dp" android:layout_alignparenttop="true">
 
        <requestfocus>
    </requestfocus>
 
    <button android:id="@+id/button1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_torightof="@+id/left" android:text="得到Fragment的数据" android:layout_below="@+id/editText2">
 
</button></edittext></relativelayout>

fragment的xml

1
2
3
4
5
6
7
8
9
10
11
<!--?xml version="1.0" encoding="utf-8"?-->
<linearlayout android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical">
 
    <edittext android:id="@+id/editText1" android:layout_height="wrap_content" android:layout_width="match_parent" android:inputtype="text" android:ems="10">
 
        <requestfocus>
    </requestfocus>
 
    <button android:id="@+id/button1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="得到Activity的数据">
 
</button></edittext></linearlayout>


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

转自:http://www.2cto.com/kf/201403/288683.html

Android开发之Fragment与Activity的数据交互通过回调机制实现

上一篇文章简单介绍了Android的回调机制的使用,这一篇博文将重点介绍Fragment碎片与activity的数据交互,fragment在Android开发中起着至关重要的作用,通过官方Androi...
  • Bruce_shan
  • Bruce_shan
  • 2016年04月14日 10:19
  • 314

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

上一篇文章简单介绍了Android的回调机制的使用,这一篇博文将重点介绍Fragment碎片与activity的数据交互,fragment在Android开发中起着至关重要的作用,通过官方Androi...
  • u013900875
  • u013900875
  • 2014年03月26日 23:03
  • 2652

Fragment和Activity之间通过广播的方式传递数据

1.管理类 /** * 广播管理类:注册广播、注销广播、发送广播 * @author weizh_000 * @date 2016-8-29 */ public class BroadCast...
  • qq_30948129
  • qq_30948129
  • 2016年08月29日 22:56
  • 1500

使用观察者模式完美解决activity与fragment通信问题

概述通常来说,解决activity和fragment通信的问题。我们都是采用如下几种方式, handler,广播,EvnetBus,接口等。那么有没有一种更好的方式来实现呢,最近项目一只在使用Rx,...
  • wbwjx
  • wbwjx
  • 2016年06月05日 08:31
  • 3263

android Fragment与Activity交互,互相发数据(附图详解)

笔者近期看官方training,发现了很多有用又好玩的知识。其中,fragment与Activity通信就是一个。 fragment与Activity通信主要是两点: 1、fragment传递信息给...
  • Double2hao
  • Double2hao
  • 2016年03月26日 09:43
  • 6997

Activity与Fragment通过接口回调进行通信

接口回调在Android中有很多的应用,比如Activity里的onCreat、onDestroy等方法,按键事件监听。Android对Fragment的是在Android3.0时加入的,所以Andr...
  • dingfengen
  • dingfengen
  • 2016年04月27日 17:37
  • 1612

利用接口回调实现fragment与activity的通信

Fragment 与activity相互传递数据,可按如下方式进行: 1、Activity 向Fragment传递数据:在Activity中创建Bundle数据包(如果传输涉及对象,要实现对象的...
  • u010571316
  • u010571316
  • 2015年04月16日 15:35
  • 4230

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

Service想要与Activity进行数据交互,首先Activity先得绑定Service.bound service是service 的实现,它允许其他应用程序绑定到它并与之交互。要提供bound...
  • u013900875
  • u013900875
  • 2014年04月10日 08:59
  • 3046

Android区别——FragmentActivity和Activity的具体区别

转自http://www.cnblogs.com/wanqieddy/p/3818718.html ragment是3.0以后的东西,为了在低版本中使用fragment就要用到android-s...
  • chuntiandejiaobu10
  • chuntiandejiaobu10
  • 2016年08月10日 15:57
  • 678

activity和fragment通过接口相互传值

在用到fragment的时候,老是会遇到一个问题,就是fragment与activity之间的通信。下面就来记录一下activity和fragment之间 通过实现接口来互相通信的方法。 1. ...
  • puhaibo_skynet
  • puhaibo_skynet
  • 2015年01月07日 12:00
  • 1095
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发之Fragment与Activity的数据交互通过回调机制实现(源代码分享)
举报原因:
原因补充:

(最多只允许输入30个字)