我正在尝试从 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/