在编写我自己的扩展 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/