【问题标题】:TextView issues after migrate from Kotlin synthetics to Jetpack view binding从 Kotlin 合成迁移到 Jetpack 视图绑定后的 TextView 问题
【发布时间】:2021-03-18 09:46:25
【问题描述】:

我最近将绑定方法从 Kotlin 合成迁移到 Jetpack 视图绑定。我的片段中有 AutofitTextView(by grantland),我为 textview 设置了一些文本。在我开始活动并附加片段后,应用程序崩溃了。错误说

java.lang.ClassCastExceptioni:androidx.appcompt.widget.AppCompatTextView 无法转换为 me.grantland.widget.AutofitTextView

所以,我决定从 AutoFitTextView 更改为 AppCompatTextView,但我面临另一个问题。由于出现错误,我无法构建应用程序

未解析参考:setText

我尝试了各种 settext 方法,但都不起作用。似乎 TextView 被视为一个视图,因此它没有 setText 方法。

========

配置详情

  • Android Studio 4.1.2
  • buildToolsVersion 28.0.3
  • jvmTarget 1.8
  • com.android.databinding:compiler 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 = "新文本"

【问题讨论】:

  • 提供您的代码。
  • @Eyosiyas 已添加。

标签: android android-studio kotlin kotlin-android-extensions android-viewbinding


【解决方案1】:

找到原因了!!这是我的错。我有 2 种同名布局,一种用于纵向,另一种用于横向。我以纵向布局而不是横向布局迁移视图,因此在生成绑定类时,它会生成两个不同的 TextView,因为 View 和 View 没有“文本”属性。这就是错误所说的。

【讨论】:

  • 我的是全传感器,而不是我将其设置为纵向,它也可以工作
  • 非常感谢!我需要很长时间才能意识到这一点!
【解决方案2】:

试试这个示例。

val binder =  FragmentMainBinding.bind(View.inflate(requireContext(), R.layout.fragment_main, null))

binder.myTextView.text = "The new text"

【讨论】:

  • 提供整个 FragmentMain 布局和 Kotlin 代码。
【解决方案3】:

因此,如果这是您的 fragment_main.xml 的整个 xml,您需要用 &lt;layout&gt; 标记将其全部包装起来。这是编译器知道构建绑定类的唯一方法。

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

【讨论】:

  • 我认为这可能不是解决方案。其他布局没有标签,工作正常。
猜你喜欢
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 2021-11-09
相关资源
最近更新 更多