android - textViewResourceId 参数是否总是必要的?

标签 android android-arrayadapter

在编写我自己的扩展 ArrayAdapter 类的适配器时,我遇到了不同的可用构造函数,我注意到它们都需要一个 textViewResourceId 参数。所以最初,我决定我将提供我的自定义适配器类android.R.id.text1:

MyAdapter adapter = new MyAdapter(this, R.layout.myRow, android.R.id.text1);

但是,在后来的开发过程中,我决定重写 getView 方法

TextView label = (TextView) myRow.findViewById(android.R.id.text1);
label.setText("Position #" + position);

效果很好。但随后我想到了这个问题:如果我正在处理如何显示该行的逻辑,是否真的有必要在我启动自定义适配器时向构造函数提供 textViewResourceId?或者当您覆盖 getView 时,是否不再需要该参数?如果我的想法是正确的,那么在知道无论如何都会覆盖显示行为的情况下实例化适配器的常见做法是什么?

最佳答案

如果您要覆盖 getView,您不需要需要指定正确的 textViewResourceId。您可以传入 0。唯一一次ArrayAdapter 尝试访问 getView 中的 ID。因为您正在覆盖 getView 并提供您自己的 View textViewResourceId永远不会访问.. 由于父类(super class)需要一个 View ID。您仍然需要将 View ID 传递给 super 调用。但是,它可以只是 0,因为它永远不会被使用

ArrayAdapter Source confirming all of this

如果您没有指定正确的 textViewResourceId 并且没有覆盖 getView.. ArrayAdapter 中的 getView假设您的整个 View 是 TextView。如果您的 View 不是 TextView。您最终会因 ClassCastException 崩溃。

关于android - textViewResourceId 参数是否总是必要的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13869080/

相关文章:

android - 错误: No resource identifier found for attribute 'showAsAction' in package 'android'

android - 如何从 <include> 布局文件中访问元素,该文件不是 Activity 而是 fragment ?

java - CustomArrayAdapter 中的 NullPointerException

java - ArrayList 适配器构造函数失败(?)

Android:simple_list_item_single_choice 不适用于 ArrayAdapter

java - CardView在RecyclerView中突然出现空白

android - 使用标志 -Dagger.hilt.disableModulesHaveInstallInCheck=true 从 Dagger 迁移到 Hilt 时抑制 @InstallIn 检查时出错

java - 待办事项列表示例对我不起作用

java - 使我的 `CustomDialogFragment` 通用

android - 如何使用 Kotlin 在 Fragment 中使用 ArrayAdapter