快速片段切换视图绑定 null

Posted

技术标签:

【中文标题】快速片段切换视图绑定 null【英文标题】:Quick fragment switching view binding null 【发布时间】:2020-12-21 09:07:15 【问题描述】:

我在选项卡布局中有 2 个片段,在它们之间快速切换会导致视图返回为 null,使用 ViewBinding。这是因为构建 FragmentXBinding 类的延迟吗?

用法示例:

chatadapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() 
            @Override
            public void onItemRangeInserted(int positionStart, int itemCount) 
                binding.chatRecyclerView.smoothScrollToPosition(0);
            
        );

错误:

java.lang.NullPointerException: Attempt to read from field 'androidx.recyclerview.widget.RecyclerView com.iku.databinding.FragmentChatBinding.chatRecyclerView' on a null object reference

【问题讨论】:

你的binding是空的。确保你在onCreateView中初始化视图绑定 它在 onCreateView 里面,我在快速切换片段时得到它。 ohhh .. 在这种情况下,请在 onViewCreated(...) 中初始化您的绑定 @chandmohd 它不起作用 @ThomasBernhard 我不完全!但是将与视图绑定相关的代码放在onViewCreated(..) 中会更好,并且必须在应用程序中删除一些实时侦听器以避免这种 NPE。甚至在onStop()中分离监听器 【参考方案1】:

FragmentX

 FragmentXBinding binding;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) 
    binding = FragmentChatBinding.inflate(inflater, container, false);
    init();
    return binding.getRoot();


 private void init() 
    // all initialization 

这有助于我使用空引用解决我的错误

【讨论】:

以上是关于快速片段切换视图绑定 null的主要内容,如果未能解决你的问题,请参考以下文章

如何使用视图绑定从片段更改父活动中的视图[重复]

切换片段时如何维护子视图的状态?

Android:在视图/活动/片段之间滑动切换

使用视图绑定访问另一个活动的 UI 元素

从对话框片段返回后,工具栏视图引用变为null

Mediaplayer在切换片段时没有暂停