Fragment的通信

效果展示

Fragment通信效果图

思路分析

其实 实现这个功能思路十分简单,关键在于如何获取 需要通信的那个 fragment 对象。下面我就为大家介绍两种通信方法。如果你还不知道 fragment 怎么使用,建议先看这篇文章 Fragment的使用

代码展示

  • 方法一:使用Tag获取对象

oneFragment的java代码

package com.wust.twofragrement;


import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.app.Fragment;
import android.widget.Button;
import android.widget.EditText;

/**
 * ClassName: OneFragrement <br/>
 * Description: <br/>
 * date: 2021/5/27 16:26<br/>
 *
 * @author yiqi<br />
 * @email:1820762465@qq.com
 * @QQ:1820762465
 * @since JDK 1.8
 */
public class OneFragrement extends Fragment {

    private Button btn_set_text;
    private EditText et_input_text;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragrement_one, null);

        et_input_text = view.findViewById(R.id.et_input_text);
        btn_set_text = view.findViewById(R.id.btn_set_text);

        //方法一:第一步:获取 TwoFragrement 对象,可以使用该对象的方法了
        TwoFragrement two = (TwoFragrement) getActivity().getFragmentManager().findFragmentByTag("two");
        //第三步:调用对象公开的方法
        btn_set_text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                two.setText(et_input_text.getText().toString());
            }
        });
        return view;
    }
}

twoFragment的java代码

package com.wust.twofragrement;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/**
 * ClassName: OneFragrement <br/>
 * Description: <br/>
 * date: 2021/5/27 16:26<br/>
 *
 * @author yiqi<br />
 * @email:1820762465@qq.com
 * @QQ:1820762465
 * @since JDK 1.8
 */
public class TwoFragrement extends Fragment {

    private TextView tv_show_text;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragrement_two, null);
        tv_show_text = view.findViewById(R.id.tv_show_text);
        return view;
    }

    //第二步:在第二个fragment里公开一个修改自身TextView的方法
    public void setText(String str){
        tv_show_text.setText(str);
    }
}
MainActivity的java代码
package com.wust.twofragrement;

import androidx.fragment.app.FragmentActivity;
import android.os.Bundle;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //第一步,获取 Fragrement
        OneFragrement oneFragrement = new OneFragrement();
        TwoFragrement twoFragrement = new TwoFragrement();

        //第二步,占坑
        getFragmentManager().beginTransaction().replace(R.id.fl_one,oneFragrement,"one").commit();
        getFragmentManager().beginTransaction().replace(R.id.fl_two,twoFragrement,"two").commit();
    }
}
  • 方法二:使用回调

oneFragment的java代码

package com.wust.twofragrement;


import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.app.Fragment;
import android.widget.Button;
import android.widget.EditText;

/**
 * ClassName: OneFragrement <br/>
 * Description: <br/>
 * date: 2021/5/27 16:26<br/>
 *
 * @author yiqi<br />
 * @email:1820762465@qq.com
 * @QQ:1820762465
 * @since JDK 1.8
 */
public class OneFragrement extends Fragment {

    private Button btn_set_text;
    private EditText et_input_text;
    private onReceiveData mOnReceiveData;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragrement_one, null);

        et_input_text = view.findViewById(R.id.et_input_text);
        btn_set_text = view.findViewById(R.id.btn_set_text);

        btn_set_text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //第三步:调用
                mOnReceiveData.receiveData(et_input_text.getText().toString());
            }
        });
        return view;
    }

    //第一步:定义接口
    public interface onReceiveData{
        void receiveData(String s);
    }

    //第二步:暴露接口
    public void setOnReceiveDataListener(onReceiveData onReceiveData){
        this.mOnReceiveData = onReceiveData;
    }
}

twoFragment的java代码

package com.wust.twofragrement;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/**
 * ClassName: OneFragrement <br/>
 * Description: <br/>
 * date: 2021/5/27 16:26<br/>
 *
 * @author yiqi<br />
 * @email:1820762465@qq.com
 * @QQ:1820762465
 * @since JDK 1.8
 */
public class TwoFragrement extends Fragment {

    private TextView tv_show_text;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragrement_two, null);
        tv_show_text = view.findViewById(R.id.tv_show_text);
        //第五步:实现回调
        MainActivity mainActivity = (MainActivity) getActivity();
        OneFragrement oneFragrement = mainActivity.getOneFragrement();
        oneFragrement.setOnReceiveDataListener(new OneFragrement.onReceiveData() {
            @Override
            public void receiveData(String s) {
                tv_show_text.setText(s);
            }
        });
        return view;
    }
}
MainActivity的java代码
package com.wust.twofragrement;

import androidx.fragment.app.FragmentActivity;
import android.os.Bundle;

public class MainActivity extends FragmentActivity {

    private OneFragrement oneFragrement;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //第一步,获取 Fragrement
        oneFragrement = new OneFragrement();
        TwoFragrement twoFragrement = new TwoFragrement();

        //第二步,占坑
        getFragmentManager().beginTransaction().replace(R.id.fl_one, oneFragrement,"one").commit();
        getFragmentManager().beginTransaction().replace(R.id.fl_two,twoFragrement,"two").commit();
    }

    //第四步:返 OneFragrement 对象
    public OneFragrement getOneFragrement(){
        return oneFragrement;
    }
}

其实,还有其他写法,都是换汤不换药,你领悟到了这两种方法 ,其余的都迎刃而解了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

super码王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值