You need to enable JavaScript to run this app. 如何实现Fragment间通信:OneFragment选单选按钮时ThreeFragment同步展示数据
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Fragment间通信:OneFragment选单选按钮时ThreeFragment同步展示数据

解决方案

推荐使用Jetpack组件中的共享ViewModel实现两个Fragment的状态同步,这是官方推荐的低耦合通信方案,不需要两个Fragment互相持有引用,也能自动适配生命周期避免空指针问题,具体实现步骤如下:

1. 创建共享ViewModel类

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class SharedViewModel extends ViewModel {
    // 存储选中的单选按钮ID,可根据业务需求替换为对应的数据实体类
    private final MutableLiveData<Integer> selectedRadioId = new MutableLiveData<>();

    // 对外提供更新选中状态的方法
    public void setSelectedRadio(int radioId) {
        selectedRadioId.setValue(radioId);
    }

    // 对外提供可读的状态监听对象
    public LiveData<Integer> getSelectedRadio() {
        return selectedRadioId;
    }
}

2. 在OneFragment中触发状态更新

在你的单选按钮选中监听逻辑中,调用ViewModel的方法更新状态:

// 注意ViewModelProvider绑定的是宿主Activity,保证两个Fragment拿到的是同一个ViewModel实例
SharedViewModel sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);

// 你的原有单选按钮监听逻辑
yourRadioGroup.setOnCheckedChangeListener((group, checkedId) -> {
    // 把选中的ID同步到ViewModel
    sharedViewModel.setSelectedRadio(checkedId);
    // 保留你原来的其他业务逻辑
});

3. 在ThreeFragment中监听状态变化

在ThreeFragment的onViewCreated方法中监听状态变化,收到更新后同步自身UI和数据:

SharedViewModel sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);

// 监听选中状态变化,只有Fragment处于活跃状态时才会收到回调,避免生命周期问题
sharedViewModel.getSelectedRadio().observe(getViewLifecycleOwner(), checkedId -> {
    if (checkedId == null || checkedId == -1) return;
    // 同步选中自身的对应单选按钮
    yourThreeFragRadioGroup.check(checkedId);
    // 加载对应的数据,替换为你自己的业务逻辑
    loadRelatedData(checkedId);
});

替代方案(不使用ViewModel)

如果暂时不想引入Jetpack组件,可以通过宿主Activity作为中间层实现:

  • 宿主Activity定义公开的同步状态方法
  • OneFragment选中单选按钮时,调用((YourHostActivity) requireActivity()).syncRadioState(checkedId)
  • Activity的syncRadioState方法中拿到ThreeFragment实例,调用其公开的更新方法即可

内容的提问来源于stack exchange,提问作者user15110327

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 04:12:05