textViewResourceId参数总是必要的吗?

pau*_*ith 5 android android-arrayadapter

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

MyAdapter adapter = new MyAdapter(this, R.layout.myRow, android.R.id.text1);
Run Code Online (Sandbox Code Playgroud)

但是,在我开发的后期,我决定覆盖getView方法

TextView label = (TextView) myRow.findViewById(android.R.id.text1);
label.setText("Position #" + position);
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.但是后来想到了这个问题:如果我正在做如何显示行的逻辑,那么当我启动自定义适配器时,是否真的有必要向构造函数提供textViewResourceId?或者,当您覆盖getView时,不再需要该参数?如果我的想法是正确的,那么实例化适配器的常见做法是什么,因为知道你会覆盖显示行为呢?

dym*_*meh 9

如果您正在覆盖getView你就不要需要指定一个合适的textViewResourceId.您可以在0中传递的唯一一次ArrayAdapter尝试访问ID是内getView..既然你要重写getView,并提供自己的看法textViewResourceId从未访问.自超class需要一个视图ID ..你仍然需要将一个视图ID传递给超级调用..但是,它只能是0,因为它永远不会被使用

ArrayAdapter Source确认所有这些

如果不指定适当的textViewResourceId,并不会覆盖getView.. getViewArrayAdapter假定你的整个观点是TextView.如果你的观点是不是TextView..你最终会从一个ClassCastException崩溃..