Android View.getTag返回null

时间:2019-07-19 17:16:18

标签: android kotlin android-view

我有一个应用程序,其中一组中有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()'

有人可以解释为什么以及如何在代码中获取代码吗?

2 个答案:

答案 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>