【问题标题】:Creating CustomView by inheriting another CustomView通过继承另一个 CustomView 创建 CustomView
【发布时间】:2021-09-15 05:52:54
【问题描述】:

我正在做一个项目,我必须使用不同类型的自定义视图。这些自定义视图共享一些通用功能,因此我决定创建一个超类并将所有通用功能放在那里。让我们调用我的超类 BaseCustomView 和子类 ACustomView

这是我的 BaseCustomView 的样子:

open class BaseCustomView@JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
    FrameLayout(context, attrs, defStyleAttr) {

    protected fun saveDetails() {
        // Saving details
   }
}

我从我的子类中调用这个函数。这是我的 ACustomView 的样子:

class ACustomView@JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : BaseCustomView(context, attrs, defStyleAttr) {
    
    fun startProcess() {
        saveDetails()
        //Start the process
    }

}

到这里为止看起来还不错。现在,当我在片段中使用 ACustomView 并使用 viewBinding 调用 startProcess() 函数时,它给了我以下错误: Unresolved reference: startProcess

这是我在片段中调用函数的代码:

binding.customView.startProcess()

谁能帮我解决这个问题?我不知道我做错了什么。任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 请分享您调用startProcess的代码
  • 嗨@ShlomiKatriel,我使用viewBinding 来访问视图并调用该函数。我已经更新了我的问题。
  • 我怀疑绑定类在最终的 apk 中生成了 View 类而不是 ACustomView。我建议在 build 文件夹中找到生成的代码部分并检查绑定类
  • 虽然我很高兴它工作了,但我仍然相信有一种方法可以让它与视图绑定一起工作:)。我会写下当前的解决方案作为答案,但如果我找到更好的解决方案,我会更新它
  • 删除了 android-studio 标签,因为该标签用于解决有关 Android Studio 产品的问题。您的问题是一个通用的 Android 问题。

标签: android android-custom-view


【解决方案1】:

生成的绑定类创建了View 类而不是ACustomView

视图绑定库在处理您的自定义视图时出现故障。

您可以使用findViewById(...) 获取您的视图。

我相信视图绑定确实支持自定义视图,所以如果我能找到使它工作的方法,我会在这里更新。

【讨论】:

  • 感谢您的回答!只是一个简单的问题,因为我无法编辑类,删除 viewBinding 类并重建项目会解决这个问题吗?因为要使用viewBinding,所以不想使用findViewById。
  • 我觉得还是执行gradle clean任务比较好
  • 我试过了,但没用。我有点害怕删除文件夹,因为它是一个非常大的项目,我不想把它搞砸?。
  • 下一步 - 使用调试标志构建您的项目,然后看看为什么视图绑定无法创建您的视图类。从命令行运行:gradlew assembleDebug --debug
【解决方案2】:

终于,我可以让它工作了。正如@ShlomiKatriel 所解释的,我遇到了这个问题,因为生成的绑定类创建了一个View 类而不是ACustomView

我首先使用findViewById(),运行应用程序,然后用生成的绑定类替换findViewById(),从而解决了这个问题。由于某种原因,使用findViewById() 后,它会生成正确的绑定类。 ?‍♂️

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多