从 Kotlin 合成迁移到 Jetpack 视图绑定后的 TextView 问题
TextView issues after migrate from Kotlin synthetics to Jetpack view binding
我最近将绑定方法从 Kotlin synthetics 迁移到 Jetpack 视图绑定。我的片段中有 AutofitTextView(由 grantland),我将一些文本设置为文本视图。在我启动 activity 并附加片段后,应用程序崩溃了。错误说
java.lang.ClassCastExceptioni: androidx.appcompt.widget.AppCompatTextView 无法转换为 me.grantland.widget.AutofitTextView
所以,我决定从 AutoFitTextView 更改为 AppCompatTextView,但我遇到了另一个问题。我无法构建应用程序,因为出现错误
未解析引用:setText
我尝试了各种 settext 方法,但其中 none 有效。似乎 TextView 被视为一个视图,因此它没有 setText 方法。
========
配置详情
- Android Studio 4.1.2
- 构建工具版本 28.0.3
- jvmTarget 1.8
- com.android.databinding:编译器 3.1.4
- androidx.appcommpat:appcompat:1.2.0
==========
fragment_main.xml
<FrameLayout
.... >
<LinearLayout
.... >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<me.grantland.widget.AutofitTextView
android:id="@+id/myTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="This is textview" />
....
</LinearLayout>
</LinearLayout>
</FrameLayout>
设置文本
FragmentMainBinding.myTextView.text = "The new text"
试试这个示例。
val binder = FragmentMainBinding.bind(View.inflate(requireContext(), R.layout.fragment_main, null))
binder.myTextView.text = "The new text"
因此,如果这是 fragment_main.xml
的整个 xml,则需要用 <layout>
标记将其全部包装起来。这是编译器知道构建绑定的唯一方法 类.
<layout
...>
<FrameLayout
.... >
<LinearLayout
.... >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<me.grantland.widget.AutofitTextView
android:id="@+id/myTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="This is textview" />
....
</LinearLayout>
</LinearLayout>
</FrameLayout>
</layout>
找到原因了!!这是我的错误。我有两种同名的布局,一种用于纵向,另一种用于横向。我迁移了纵向布局中的视图,但没有迁移横向布局中的视图,因此在生成绑定 class 时,它会生成两个不同的 TextView,因为 View 和 View 没有“文本”属性。这就是错误所说的。
我最近将绑定方法从 Kotlin synthetics 迁移到 Jetpack 视图绑定。我的片段中有 AutofitTextView(由 grantland),我将一些文本设置为文本视图。在我启动 activity 并附加片段后,应用程序崩溃了。错误说
java.lang.ClassCastExceptioni: androidx.appcompt.widget.AppCompatTextView 无法转换为 me.grantland.widget.AutofitTextView
所以,我决定从 AutoFitTextView 更改为 AppCompatTextView,但我遇到了另一个问题。我无法构建应用程序,因为出现错误
未解析引用:setText
我尝试了各种 settext 方法,但其中 none 有效。似乎 TextView 被视为一个视图,因此它没有 setText 方法。
========
配置详情
- Android Studio 4.1.2
- 构建工具版本 28.0.3
- jvmTarget 1.8
- com.android.databinding:编译器 3.1.4
- androidx.appcommpat:appcompat:1.2.0
==========
fragment_main.xml
<FrameLayout
.... >
<LinearLayout
.... >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<me.grantland.widget.AutofitTextView
android:id="@+id/myTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="This is textview" />
....
</LinearLayout>
</LinearLayout>
</FrameLayout>
设置文本
FragmentMainBinding.myTextView.text = "The new text"
试试这个示例。
val binder = FragmentMainBinding.bind(View.inflate(requireContext(), R.layout.fragment_main, null))
binder.myTextView.text = "The new text"
因此,如果这是 fragment_main.xml
的整个 xml,则需要用 <layout>
标记将其全部包装起来。这是编译器知道构建绑定的唯一方法 类.
<layout
...>
<FrameLayout
.... >
<LinearLayout
.... >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<me.grantland.widget.AutofitTextView
android:id="@+id/myTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="This is textview" />
....
</LinearLayout>
</LinearLayout>
</FrameLayout>
</layout>
找到原因了!!这是我的错误。我有两种同名的布局,一种用于纵向,另一种用于横向。我迁移了纵向布局中的视图,但没有迁移横向布局中的视图,因此在生成绑定 class 时,它会生成两个不同的 TextView,因为 View 和 View 没有“文本”属性。这就是错误所说的。