我有一个活动,我想要替换一个片段。我正在使用的代码如下:
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()时所有元素都为null。
例如,ResultFragment具有TextView名称。当我这样做时:
name.setText(result.getName());
我收到NullPointerException,因为name为null。类似地,对于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方法答案 0 :(得分:0)
您可以通过将updateUI()
下的代码放在线程中来更新updateUI()
下的视图。例如。 Runnable
Inside Fragment,声明一个对象并在活动中调用。
public Runnable mRunnableUpdate = new Runnable() {
@Override
public void run() {
updateUI();
}
};
活动
mRunnableUpdate.run();
答案 1 :(得分:0)
因此,在花了很多时间之后,我终于意识到在所有元素初始化之前都调用了updateUI。这更像是一个时间问题。我只需要确保在调用updateUI之前初始化所有元素,从而解决了问题。