android - 在活动中添加/替换后,片段的所有元素都为空
问题描述
我有一个要替换片段的活动。我正在使用的代码如下:
ResultFragment resultFragment = new ResultFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.fl_act_events_view_container, resultFragment, "ResultFragment")
.commit();
fragmentManager.executePendingTransactions();
resultFragment.updateUI(result);
我在 Activity 的 onCreate() 方法中执行此代码。
updateUI() 方法只是根据“结果”字符串更新结果片段上所有元素的值。我遇到的问题是,调用 updateUI() 时所有元素都为空。
例如,ResultFragment 有一个 TextView 名称。当我做:
name.setText(result.getName());
我得到 NullPointerException 因为名称为空。ResultFragment 的所有其他 UI 元素也是如此。
我无法理解是什么问题?我尝试了多种方法,但似乎没有任何效果。就像,我还做了以下事情:
Fragment fragment = getSupportFragmentManager().findFragmentByTag("ResultFragment");
if(fragment instanceof ResultFragment){
resultFragment = (ResultFragment) fragment;
resultFragment.updateUI(result);
}
但同样的问题仍然存在。
然后我尝试了:
ResultFragment resultFragment = new ResultFragment();
replaceFragment(resultFragment);
ResultFragment.updateUI(result);
public void replaceFragment(Fragment fragment) {
if(fragment==null) return;
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fl_act_events_view_container, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commitAllowingStateLoss();
}
但没有任何效果。有人请解释一下我应该如何在替换活动中的片段后调用 updateUI 方法
解决方案
所以,在花了很多时间之后,我终于意识到 updateUI 是在所有元素初始化之前被调用的。这更像是一个时间问题。我只需要确保在调用 updateUI 之前初始化所有元素,从而解决了问题。
推荐阅读
- firebase - Firebase 远程配置获取在没有播放服务的设备上失败
- javascript - Reactjs:用 axios 做一个函数来承诺
- c++ - 为 TensorFlow Lite C++ 编写 read_jpeg 和 decode_jpeg 函数
- windows - 使用自定义 .dll 文件会产生 Unable to resolve reference 'Windows.Foundation.UniversalApiContract' 和其他错误
- sql - 获取记录的查询具有 some_id 和 some_flag 使得所有相同的 some_id 必须在 oracle 中具有所有 some_flag ='Y'
- python - 通过 Python 中的函数生成多个空数据帧
- android - 如何从 kotlin 模拟静态 java 方法,mockkStatic 不起作用
- c++ - 对 Winsock 函数的未定义引用
- python - 无法在 jupyter notebook 中为张量流 gpu 导入 keras
- reactjs - 使用 DTO 的接口时遇到问题