我有一个应用程序,其中一组中有2个按钮,其作用类似于切换按钮。每个按钮都使用数据绑定在其标签字段中分配了一个静态枚举,如下所示:
xml
<data>
<variable name="SortOrder" type="com.th3pl4gu3.lifestyle.core.operations.SortOperations.Order"/>
</data>
...
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/Margin_ButtonGroup_Small"
android:layout_marginBottom="@dimen/Margin_ButtonGroup_Default"
android:layout_marginStart="@dimen/Margin_ButtonGroup_Default"
android:layout_marginEnd="@dimen/Margin_ButtonGroup_Default"
app:singleSelection="true"
app:checkedButton="@+id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup_Ascending">
<com.google.android.material.button.MaterialButton
android:id="@id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup_Ascending"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Fragment_BottomSheetDialog_Sort_ToggleButton_Ascending"
android:tag="@{SortOrder.ASC}"
app:backgroundTint="@color/custom_button_background_states"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
<com.google.android.material.button.MaterialButton
android:id="@id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup_Descending"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Fragment_BottomSheetDialog_Sort_ToggleButton_Descending"
android:tag="@{SortOrder.DESC}"
app:backgroundTint="@color/custom_button_background_states"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
</com.google.android.material.button.MaterialButtonToggleGroup>
然后在后面的代码中,我试图这样获得标签:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = DataBindingUtil.inflate(inflater, R.layout.fragment_bottomdialog_sort, container, false)
val button = _binding.root.findViewById<MaterialButton>(R.id.BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup_Ascending)
val order = button.tag.toString()
return _binding.root
}
但是,这将返回 NullPointerException
异常:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String java.lang.Object.toString()'
有人可以解释为什么以及如何在代码中获取代码吗?
答案 0 :(得分:0)
绑定视图时,必须设置当前Order。 必须生成的方法
_binding.serOrder(order :Order)
传递对象的地方。
您可以在创建数据时绑定数据而无需数据绑定
答案 1 :(得分:0)
您要声明类型为SortOrder
的变量 Order
。您真正想要的是导入类型Order
以在布局中使用枚举:
<data>
<import type="com.th3pl4gu3.lifestyle.core.operations.SortOperations.Order"/>
</data>
如果要使用SortOrder
而不是Order
的名称,请添加alias
属性:
<data>
<import type="com.th3pl4gu3.lifestyle.core.operations.SortOperations.Order" alias="SortOrder"/>
</data>