textViewResourceId参数总是必要的吗?

时间:2012-12-13 21:50:43

标签: 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 时,不再需要该参数?如果我的想法是正确的,那么实例化适配器的常见做法是什么,因为知道你会覆盖显示行为呢?

2 个答案:

答案 0 :(得分:9)

如果您覆盖getView,则 NOT 需要指定正确的textViewResourceId ..您可以传入0. ArrayAdapter尝试的唯一时间访问该ID的位置在getView之内。由于您要覆盖getView并提供自己的视图textViewResourceId永远不会被访问.. 由于超类需要视图ID ..你仍然需要将视图ID传递给超级调用..但是,它可以只是0,因为它永远不会被使用

ArrayAdapter Source confirming all of this

如果您未指定正确的textViewResourceId且未覆盖getView,则getView中的ArrayAdapter会假定您的整个视图为TextView。如果您的视图不是TextView ..您最终会遇到来自ClassCastException的崩溃..

答案 1 :(得分:0)

您不需要在适配器中使用任何类型的构建。

你可以扩展BaseAdapter并制定自己的规则,显示什么类型的数据等......

事实上,我几乎从未使用Android开箱即用的内置适配器,因为使用baseAdapter非常容易。