java - 将 findViewById 从 Java 转换为 Kotlin

标签 java android kotlin

我正在尝试从 Java 转换这段代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.main_fragment, container, false);
    genre[0] = view.findViewById(R.id.MovieGenre);
    genre[1] = view.findViewById(R.id.MovieGenre2);
    genre[2] = view.findViewById(R.id.MovieGenre3);
    recyclerView[0] = view.findViewById(R.id.rc_view);
    recyclerView[1] = view.findViewById(R.id.rc_view2);
    recyclerView[2] = view.findViewById(R.id.rc_view3);

    if (movieList.size()==0) loadMovie();
    else refreshList();

    return view;
}

到 Kotlin :

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    view = inflater.inflate(R.layout.main_fragment, container, false) as Nothing?
    genre[0] = this.view.findViewById(R.id.MovieGenre)
    genre[1] = this.view.findViewById(R.id.MovieGenre2)
    genre[2] = view.findViewById(R.id.MovieGenre3)
    recyclerView[0] = view.findViewById(R.id.rc_view)
    recyclerView[1] = view.findViewById(R.id.rc_view2)
    recyclerView[2] = view.findViewById(R.id.rc_view3)

    if (movieList.size == 0) loadMovie() else refreshList()
    return view
}

问题是编译器无法识别findViewById。如何将 xml 中的回收器 View 分配给每个变量?

最佳答案

我认为,一些改变会起作用。

删除as Nothing?来自

view = inflater.inflate(R.layout.main_fragment, container, false) as Nothing?

这可能是不必要的。

我不明白你在初始化时想要实现什么,比如 genre[0], genre[1] ..

genre[0] = this.view.findViewById(R.id.MovieGenre)
genre[1] = this.view.findViewById(R.id.MovieGenre2)
genre[2] = view.findViewById(R.id.MovieGenre3)
recyclerView[0] = view.findViewById(R.id.rc_view)
recyclerView[1] = view.findViewById(R.id.rc_view2)
recyclerView[2] = view.findViewById(R.id.rc_view3)

您可以尝试如下所示

val recycler_view = findViewById<RecyclerView>(R.id.recycler_view)

val recycler_view: RecyclerView = findViewById(R.id.recycler_view)

或者您可以尝试@TemaTre 答案中提到的扩展功能。

您可以使用anko library

编辑

Anko 已弃用 see

关于java - 将 findViewById 从 Java 转换为 Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60708721/

相关文章:

java - 如何在android中使用带有 'onCheckedChanged'方法的switch语句?

android - 如何重新启动已取消的作业?

java - 使用二维数组熄灯游戏

java - Android - 如何创建类似 html 文本区域的 EditText

java - Java 中的对象池模式

java - 将谷歌地图( fragment ?)添加到 Activity

java - Spring Security Acl级别类权限

android - 如何像 "Home", "News & Weather app"那样用手指移动滑动标签内容(TabActivity)?

android - Kotlin 内部类访问外部类?

Android Livedata Observer 协程 Kotlin