【发布时间】:2021-12-15 18:57:17
【问题描述】:
我在单个活动中使用带有浮动操作按钮的 BottomAppbar。Fab 在不同的片段中具有不同的职责。
- HomeFragment -> 添加新项目
- AddProblemFragment ->保存项目(图标也更改)
- DetailsFragment -> 将项目添加到选定的集合(图标也更改)
我尝试在活动和片段之间使用监听器。图标和位置变化完美,但我无法处理单击时片段中的调用方法。
为了解决点击问题,我从活动中获得了工厂参考
fab = requireActivity().findViewById(R.id.fab) 在每个片段中(在 onViewCreated 中)。
所以,问题是在方向改变之后
java.lang.NullPointerException: requireActivity().findViewById(R.id.fab) must not be null
有没有办法在方向改变后避免出现这个错误?或者应该选择哪个生命周期来初始化fab?
是否可以在BaseFragment中初始化fab并使用它,因为几乎每个Fragment都有fab?
代码片段:
//Each fragment same approach
private lateinit var fab:FloatingActionButton
override fun onViewCreated(view:View,savedInstanceState:Bundle?){
fab = requireActivity().findViewById(R.id.fab_btn_add)
fab.setImageResource(R.drawable.ic_related_icon)
fab.setOnClickListener {
//calls method
}
【问题讨论】:
-
听起来您在活动的布局 XML 中使用了已弃用的
<fragment>标记。您是否有没有使用FragmentContainerView的原因,它不会遇到这个问题? -
成功了。我用 FragmentContainerView 替换了它。
导致了这个问题。非常感谢。
标签: android kotlin android-fragments floating-action-button