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

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

Fragment和Activity之间是可以相互进行参数传送这些。但是Fragment不可以直接就将数据传送到另外一个Fragment,而是借助Activity,先传到Activity,如何再通过Activity传到Fragment。  所以实现Fragment和Activity之间的数据传送是很关键的。

(1)先创建一个Interface接口IBnCallListener,用来实现两者之间的数据传送。

package com.util;
/**
 * 传送Fragment和FragmentActivity之间的控件交互信息
 *
 */
public interface IBtnCallListener {
    public void transfermsg();
}

(2)创建Activity类实现IbtnCallListener接口,重载onAttachFragment(Fragment fragment)方法和transfermsg()方法,然后transfermsg()方法就根据自己项目需要去调用了

package com.activity;

/**
 *
 *主界面类
 *fragment是3.0以后的东西,为了在低版本中使用fragment就要用到android-support-v4.jar兼容包,
 *而fragmentActivity就是这个兼容包里面的,它提供了操作fragment的一些方法,其功能跟3.0及以后的版本的Activity的功能一样。
 */
public class MainActivity extends FragmentActivity implements IBtnCallListener{
        //RadioButton

        private RadioButton radioBtn;

        private Intent intent;
        private Bundle bundle;

        private IBtnCallListener mBtnCallListener;  

        private Bundle sendBundle;

        private MyFragment mFragment;

        FragmentTransaction ft;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //设置无标题
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.main);

        }

       ...

        @Override
        public void onAttachFragment(Fragment fragment) {
            try {
                 mBtnCallListener=(IBtnCallListener) fragment;
            } catch (Exception e) {  

            }
            super.onAttachFragment(fragment);
        }

       @Override
       public void transfermsg() {
        radioBtn.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.tab_found_pressed_icon, 0, 0);
            radioBtn.setTextColor(mFound.getResources().getColor(R.color.topbar_bg));
            if(mFoundFragment == null){
                //关键代码,肯定要这三句代码的,其它的根据自己的项目需要
            mFragment  = new MyFragment();
            sendBundle = new Bundle();
            sendBundle.putString("test", "Android");
               //transfermsg();
               mFragment.setArguments(sendBundle);
               ft.add(R.id.fg_content,mFragment);
          }
                  ft.show(mFoundFragment);
          ft.commit();
    }
}

(3)Fragment类实现IBtnCallListener接口类

/**
 * MyFragMent类
 */

public class MyFragment extends Fragment implements IBtnCallListener{

    private Bundle bundle;

    IBtnCallListener mbtnListener;  

    private String test;

    //@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.found,container,false);
        transfermsg();
        return view;
    }

    }

   @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onAttach(Activity activity) {
        try {
            mbtnListener=(IBtnCallListener) activity;
        } catch (Exception e) {
            // TODO: handle exception
            throw new ClassCastException(activity.toString() + "must implement mbtnListener");
        }
        super.onAttach(activity);
    }

    @Override
    public void transfermsg() {
        bundle = getArguments();
        test = bundle.getString("test");
        System.out.println("由Activity传输过来的信息");
        Toast.makeText(getActivity(), test, 1000).show();
    }
}
时间: 2024-10-27 02:12:59

安卓Fragment和Activity之间的数据通讯的相关文章

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

Fragment 与 Activity之间传递数据有两种方法,一种是使用setArgument,一种是使用接口回调.下面先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部),分别是Fragment1,Fragment2和Fragemnt3: 现在他现在要吩咐部门Fragment1去做一些事情,比如说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的. 一般来说,会有个宰相或者太监总管来负责皇帝口谕是

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

Fragment 与 Activity之间传递数据有两种方法,一种是使用setArgument,一种是使用接口回调.下面先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部),分别是Fragment1,Fragment2和Fragemnt3: 现在他现在要吩咐部门Fragment1去做一些事情,比如说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的. 一般来说,会有个宰相或者太监总管来负责皇帝口谕是

Android进阶之Fragment与Activity之间的数据交互

1 为什么 因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常. 2 Activity把值传递给Fragment 2.1 第一种方式,也是最常用的方式,就是使用Bundle来传递参数 (1)宿主Activity/FragmentAdapter中: Bundle bundle = new Bundle(); bundle.putString(Constant.INTENT_ID, productId); Fragment fragment =

[转]Android:Activity+Fragment及它们之间的数据交换(一)

2014-05-18         来源:Android:Activity+Fragment及它们之间的数据交换(一)   简介: 为什么要用Fragment?使用Fragment可以在一个Activity中实现不同的界面.Fragment与 Fragment之间的动画切换,远比Activity与Activity之间的动画切换变化方式多.很多时候,我们通过使用一个Activity,切换 多个Fragment.本次博客,主要列举一下Fragment与它的Activity之间进行数据交换的方式.

Android:Activity+Fragment及它们之间的数据交换(一)

简介: 为什么要用Fragment?使用Fragment可以在一个Activity中实现不同的界面.Fragment与Fragment之间的动画切换,远比Activity与Activity之间的动画切换变化方式多.很多时候,我们通过使用一个Activity,切换多个Fragment.本次博客,主要列举一下Fragment与它的Activity之间进行数据交换的方式. 1.Fragment中通过getActivity()然后进行强制转化,调用Activity中的公有方法 ((XXXXActivit

Android实战简易教程-第五十二枪(Fragment和Activity之间通信)

Fragment的使用可以让我们的应用更灵活的适配各种型号的安卓设备,但是对于Fragment和Activity之间的通信,很多朋友应该比较陌生,下面我们就通过一个实例来看一看如何实现. 一.Activity->Fragment传递数据 1.main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.an

Android中Fragment和Activity之间的互操作代码例子

摘要 本文介绍了Android中一个Activity中有多个Fragment的情况下,Fragment之间如何通过Activity进行互操作. 源代码 源代码地址为:http://download.csdn.net/detail/logicteamleader/8931199 源代码使用ADT编写,ADT版本为2014,Android版本为android-22. 技术要点 1.在Activity中的多个Fragment之间要互操作,一定要通过此Activity,不能直接通信: 2.在Activi

Intent 意图 用于Activity之间的数据传递

转自:http://blog.sina.com.cn/s/blog_83940dfb0100veas.html 用于Activity之间的数据传递 在起始Activity中,发送数据 protected void onCreate(Bundle saveInstanceState){ super.onCreate(saveInstanceState); setContentView(R.layout.thisactivity); Intent intent = new Intent(); //设

Android——Fragment和Activity之间的通信+Frangment生命周期

Android--Fragment和Activity之间的通信+Frangment生命周期 Fr'agment和Activity之间的通信 1.在Fragment中声明一个接口. 2.在Activity中实现在Fargment中声明的接口. 3.在Fragment中声明一个接口对象. 4.在Frangment的生命周期Onattach方法中判断当前Activity是否实现了此Fragment中声明的接口.如果已实现,就把当前Activity转换成接口对象. 5.调用Activity中实现的方法=