我是Android编程的新手,并使用适配器执行第一步(对于ListView
)。
覆盖Adapter.getView
我经常看到这样的事情:
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) parent.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.table_row, null);
} else {
itemView = convertView;
}
// play with itemView
return itemView;
}
我的问题是反对这一点:
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = super(position, convertView, parent);
// play with itemView
return itemView;
}
这似乎对我有用,但我确信我有一点很重要:D
感谢阅读并抱歉我的英语不好......
答案 0 :(得分:6)
您可以使用
View itemView = super(position, convertView, parent);
如果您只是来自“可以使用”的适配器(不是BaseAdapter
),例如SimpleAdapter
或ArrayAdapter
,因为他们已经拥有他们的getView()
的实施。
看看它们:ArrayAdapter的http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/ArrayAdapter.java#361和 SimpleAdapter http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/SimpleAdapter.java#113。
如果你派生自BaseAdapter
,你将不得不手动实现整个方法,正如你在第一个例子中描述的那样,因为它没有开箱即用的结果:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/BaseAdapter.java#BaseAdapter < / p>
答案 1 :(得分:2)
适配器的getView(..)
- 方法可以有多种方式。唯一的问题是,哪一个最有效?
一篇有趣的文章,让您了解ListView更详细:http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/
答案 2 :(得分:1)
如果你的意思是这段代码:
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) parent.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.table_row, null);
} else {
itemView = convertView;
}
对您来说似乎没必要:这段代码允许Android创建相对较少数量的单元格(等于屏幕上可见的单元格数量 - ),然后“回收”这些单元格 - 使用它们当用户滚动列表时,而不是为数组中的每个对象创建一个单元格。 这将帮助您:
保存内存 - 因为您没有为数组中的每个元素创建视图
节省CPU使用率 - 从xml文件中创建视图对象(“膨胀”)是相对昂贵的任务,对阵列中的每个项目执行此操作可能会阻碍UI线程