在活动中添加/替换后,片段的所有元素都为空

Posted

技术标签:

【中文标题】在活动中添加/替换后,片段的所有元素都为空【英文标题】:All elements of fragment are null after it is added/replaced in activity 【发布时间】:2018-10-20 17:23:23 【问题描述】:

我有一个要替换片段的活动。我使用的代码如下:

 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() 方法只是根据“result”字符串更新结果片段上所有元素的值。我遇到的问题是,调用 updateUI() 时所有元素都为空。

例如,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 方法

【问题讨论】:

你能展示你的片段代码吗,你的片段里面是什么? 【参考方案1】:

您可以通过将updateUI() 下的代码放入线程中来更新updateUI() 下的视图。例如。 Runnable

在Fragment内部,声明一个对象并在activity中调用。

public Runnable mRunnableUpdate = new Runnable() 
    @Override
    public void run() 
        updateUI();
    
;

活动 mRunnableUpdate.run();

【讨论】:

【参考方案2】:

所以,在花了很多时间之后,我终于意识到 updateUI 是在所有元素初始化之前被调用的。这更像是一个时间问题。我只需要确保在调用 updateUI 之前初始化所有元素即可解决问题。

【讨论】:

以上是关于在活动中添加/替换后,片段的所有元素都为空的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将片段添加到android中的框架布局

java 在活动中添加和替换片段

方向更改后片段中的 getActivity() 为空

以编程方式替换片段

如何从主要活动中替换片段

用片段替换时操作栏向下移动