Android入门教程 fragment通信

一、Activity与Fragment之间通信

1、Activity向Fragment传值

在Activity中使用setArguments封装所需传递的值,在Fragment中使用getArguments获取值。
Activity代码示例

Bundle bundle = new Bundle();
            bundle.putString("name", "zhangsan");
            fragment_a.setArguments(bundle);//注意,fragment被hide之后,不能使用setArguments方法

Fragment代码示例

Bundle bundle = getArguments();
        if(bundle!=null){
            String name = bundle.getString("name");
            textview.setText(name);
        }

2、Fragment向Activity传值

在Fragment中可以直接通过getActivity方法获得宿主Activity对象,然后调用实例方法或实例变量。
Activity代码示例

//在Activity中创建一个实例方法
public void showTips(){
        Toast.makeText(this, "来自fragment的提示请求", Toast.LENGTH_LONG).show();
    }

Fragment代码示例

@Override
            public void onClick(View v) {
                MainActivity mActivity = (MainActivity) getActivity();//获取Activity对象
                mActivity.showTips();//调用Activity中的实例方法
            }

这里写图片描述

二、Fragment与Fragment之间通信

step1:在AFragment中创建实例方法或实例变量;
step2:在Activity中动态加载AFragment时,调用
add(int containerViewId, Fragment fragment, String tag)方法,tag是这个Fragment的名字,可自定义;
step3:在BFragment中通过
getActivity().getFragmentManager().findFragmentByTag(tag)方法即可获得对应的Fragment对象,然后调用此Fragment中创建的实例方法或实例变量。
FragmentA代码示例

FragmentB fb = (FragmentB) getActivity().getFragmentManager().findFragmentByTag("B");
                fb.changeTextB();

FragmentB代码示例

public void changeTextB(){
        textview.setText("FragmentB文字已改变");
    }

Activity代码示例

//将两个fragment添加至事务中,并添加tag
ft.add(R.id.frame_content, fragment_a,"A");
ft.add(R.id.frame_content, fragment_b,"B");

注意:
FragmentA中调用FragmentB中的实例方法,一定要保证FragmentB已经提前添加至事务中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值