Fragment内EditText绑定DatePickerDialog选完日期不更新问题求助
问题根因
Fragment Result API要求结果发送方和接收方使用同一个FragmentManager实例,你的代码两端使用的FragmentManager不匹配,导致回调无法触发:
- 显示
FragmentData时,你使用的是Activity级别的SupportFragmentManager - 注册结果监听时,你使用的是当前Fragment的
getChildFragmentManager
两个FragmentManager属于不同的上下文,自然接收不到回调事件。
修复方案
统一两端的FragmentManager即可,推荐使用当前Fragment的getChildFragmentManager管理子DialogFragment,修改代码如下:
1. 调整FragmentAggiungiPaziente代码
将FragmentManager实例替换为getChildFragmentManager,同时将监听器注册逻辑移到点击事件外部,避免每次点击重复注册:
// 替换原来的Activity FragmentManager获取逻辑 final FragmentManager fm = getChildFragmentManager(); dataPaz = view.findViewById(R.id.dataPazNew); // 提前注册结果监听器,仅执行一次 getChildFragmentManager().setFragmentResultListener("chiaveRichiesta", getViewLifecycleOwner(), new FragmentResultListener() { @Override public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) { String risultato = result.getString("chiaveRisultato"); if (risultato != null) { dataPaz.setText(risultato); } } }); dataPaz.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentData newFragment = new FragmentData(); newFragment.show(fm, "data"); } });
2. 可选校验
如果修改后仍无效果,可以在FragmentData的onDateSet方法中加日志确认返回的日期值非空,同时检查布局中dataPazNew这个EditText没有设置android:enabled="false"、android:focusable="false"等会拦截文本更新的属性。
内容的提问来源于stack exchange,提问作者Pasquale Serra
相关产品推荐
相关产品推荐

