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

Android开发之通过接口回调机制加载数据(源代码分享)

Android开发之通过接口回调机制加载数据的简单实现,在实际开发中通过callback方法得到网络加载的数据的使用频率远比通过直接开启线程或异步任务加载数据的频率高的多,这篇文章的代码将简单实现该机...

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

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

Fragment 和Activity 通过回调交互

  • 2015年09月07日 00:16
  • 84KB
  • 下载

Android Fragment与Activity通过回调实现通信

Android Fragment与Activity通过回调实现通信

通过 回调让Activity和Fragment及时交互

Fragment 一经推出,就广泛的使用在项目中,在适配方面,减少代码冗余方面大有助益,那么Fragment和Activity如何交互呢,我所知道的,通过fragment.setxxx(),((类型转...

android小技巧:在activity中实现与绑定的fragment的回调

看到标题你可能会想是一个多么高大上的技巧呢?其实很一般就是自定义回调函数. 首先我们知道activity之间的数据传递有几种方式: 一是startActivityForResut()启动一个act...
  • icedcap
  • icedcap
  • 2014年11月18日 23:55
  • 1913

Android回调机制之Activity与DialogFragment数据传递

Android回调机制之Activity与DialogFragment数据传递在实际编程过程中,我们经常碰到这样一种情况:在新建的Dialog或者Fragment中修改数据,但是要在Activity或...

EventBus实现activity跟fragment交互数据

  • 2015年09月22日 03:17
  • 1.77MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发之Fragment与Activity的数据交互通过回调机制实现(源代码分享)
举报原因:
原因补充:

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