如何解决Android:将不同的布局文件分配给可变的 ViewBinding 对象?
是否可以有条件地将不同的布局文件附加到同一个视图绑定对象上?
例如,我在片段中定义了一个通用视图绑定对象,如下所示:
private lateinit var binding: ViewBinding
然后在 onCreateView 中,我根据这样传递的值设置它:
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
if (savedInstanceState != null) {
settingsVisible = savedInstanceState.getBoolean(Constants.SETTIGNS_VISIBILITY_KEY,false)
}
binding = DataBindingUtil.inflate(inflater,R.layout.fragment_style_horizontal,container,false) as FragmentStyleHorizontalBinding
if(activity != null) {
val args = arguments
val isHorz = args?.getBoolean("isHorizontalLayout")
isHorz?.let {
if(!it){
binding = DataBindingUtil.inflate(inflater,R.layout.fragment_style,false) as FragmentStyleBinding
}
}
}
setupViews();
return binding.root
}
这可能吗?我无法以这种方式访问视图,并且我不想创建两个不同的视图绑定对象以避免为带有单击侦听器的视图重复两次代码。
解决方法
我能想到的唯一方法是您保留一个布尔值的标志,为其设置了视图,或者您只能检查 instanceOf
(在 kotlin 中将是 is
),并相应地进行转换使用前将 ViewBinding
对象转换为实际绑定类。
这可能会变得混乱 所以最好创建两个单独的 Fragments
如果您的用例允许您这样做。或者,您可以在同一布局中拥有两个视图,您可以根据需要更改可见性。
private lateinit var binding1: conditionOneLayout
private lateinit var binding2: conditionTwoLayout
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
if(condition_one())
binding1 = DataBindingUtil.inflate(inflater,R.layout.condition_one_layout,container,false)
else if(condition_two())
binding2 = DataBindingUtil.inflate(inflater,R.layout.condition_two_layout,false)
.
.
.
if(condition_one()){
return binding1.root
}
else{
return binding2.root
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。