当前位置: 首页 > 知识库问答 >
问题:

自动Java到Kotlin转换:对“ARG\u LAYOUT\u RES\u ID”的未解析引用

朱运诚
2023-03-14

我正在Kotlin应用程序中使用AppIntro,需要自定义其布局。教程告诉我们使用此代码作为起点。因为这是用Java编写的,所以我将其转换为Kotlin(虽然不是100%自动化的,因为Kotlin不支持'static'关键字):

import android.support.v4.app.Fragment
import android.os.Bundle
import android.support.annotation.Nullable
import android.view.ViewGroup
import android.view.LayoutInflater
import android.view.View


class IntroFragment: Fragment() {
    private val ARG_LAYOUT_RES_ID = "layoutResId"
    private var layoutResId: Int = 0

    companion object {
        fun newInstance(layoutResId: Int): IntroFragment{
            val args: Bundle = Bundle()
            args.putSerializable(ARG_LAYOUT_RES_ID, layoutResId)
            val fragment = IntroFragment()
            fragment.arguments = args
            return fragment
        }
    }

    override fun onCreate(@Nullable savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if (arguments != null && arguments!!.containsKey(ARG_LAYOUT_RES_ID)) {
            layoutResId = arguments!!.getInt(ARG_LAYOUT_RES_ID)
        }
    }

    @Nullable
    override fun onCreateView(inflater: LayoutInflater, @Nullable container: ViewGroup?,
                              @Nullable savedInstanceState: Bundle?): View? {
        return inflater.inflate(layoutResId, container, false)
    }
}

在本部分:

 args.putSerializable(ARG_LAYOUT_RES_ID, layoutResId)

Android Studio抱怨:

未解析的引用:ARG\u LAYOUT\u RES\u ID

如何解决这个问题?

共有3个答案

於宾白
2023-03-14

companion对象块中的变量和函数基本上是静态的(如果要从Java中进行并行处理)。

ARG\u LAYOUT\u RES\u ID变量不在伴生对象范围内,因此无法静态访问它。

ARG_LAYOUT_RES_ID变量移动到伴随对象范围内,一切都会恢复正常。

宋嘉禧
2023-03-14

将字段移动到您的同伴对象:

companion object {

    private val ARG_LAYOUT_RES_ID = "layoutResId"

    fun newInstance(layoutResId: Int): IntroFragment{
        val args: Bundle = Bundle()
        args.putSerializable(ARG_LAYOUT_RES_ID, layoutResId)
        val fragment = IntroFragment()
        fragment.arguments = args
        return fragment
    }
}
戚飞雨
2023-03-14

这是因为ARG\u LAYOUT\u RES\u ID是一个实例变量,而newInstance方法是一个类(静态)方法。

如果您将ARG_LAYOUT_RES_ID移动到伴随对象中,它将起作用。像这样:

import android.support.v4.app.Fragment
import android.os.Bundle
import android.support.annotation.Nullable
import android.view.ViewGroup
import android.view.LayoutInflater
import android.view.View


class IntroFragment: Fragment() {
    private var layoutResId: Int = 0

    companion object {
        private const val ARG_LAYOUT_RES_ID = "layoutResId"

        fun newInstance(layoutResId: Int): IntroFragment {
            val args: Bundle = Bundle()
            args.putSerializable(ARG_LAYOUT_RES_ID, layoutResId)
            val fragment = IntroFragment()
            fragment.arguments = args
            return fragment
        }
    }

    override fun onCreate(@Nullable savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if (arguments != null && arguments!!.containsKey(ARG_LAYOUT_RES_ID)) {
            layoutResId = arguments!!.getInt(ARG_LAYOUT_RES_ID)
        }
    }

    @Nullable
    override fun onCreateView(inflater: LayoutInflater,
                              @Nullable container: ViewGroup?,
                              @Nullable savedInstanceState: Bundle?): View? {

        return inflater.inflate(layoutResId, container, false)
    }
}

您还可以像上面所示那样,将ARG\u LAYOUT\u RES\u IDaconst

 类似资料:
  • 我有如下java代码: 我使用Android Studio选项“转换为Kotlin”对其进行了转换 下面是它的外观: IDE现在在这里强调了'add'方法: 它说: 未解决的引用:添加 我怎样才能解决这个问题? 更新: 这是我的转换函数: 示例用法:

  • 我试图使用新的相机硬件API(android.hardware.camera2)的示例代码为我的Android应用程序。首先,我通过Android Studio的静态编程语言插件的自动转换功能将Java代码转换为静态编程语言代码。下面是一段转换后的代码: 我得到了未解决的引用错误: 但是这些常数在原始Java代码中是可以识别的。这些错误有什么解决办法吗?

  • 我一直得到错误"未解决的引用:绑定"。有人知道我错过了什么吗?我已经试着更新了一切。但是绑定不起作用。 建筑格拉德尔。(module.app):

  • 我试图将我的android项目迁移到使用gradle kotlin dsl,将所有的build.gradle文件替换为build.gradle.kts文件,并在那里使用kotlin。以前,我曾经有一个kotlin文件,其中包含具有库和版本常量的对象元素(在buildSrc->src->main->kotlin中),例如:

  • 这一行: 给我错误。 我的项目创建过程非常基本:在Intellij idea中: