我有一个gridView,我使用自定义适配器填充数据。为此我已经覆盖了getView()方法。但是,由于我的gridView是自定义的,我必须使用静态持有者类(如在线提供的许多示例中所示)。如果我不想使用持有人,我可以用其他方式实现它吗?为什么使用getTag()和setTag()?我搜索了他们但找不到足够的解释。
持有人类 -
static class RecordHolder{
ImageView imgView;
TextView txtView;
}
getView方法 -
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
RecordHolder holder = new RecordHolder();
if (convertView == null) {
LayoutInflater inflater = (getActivity()).getLayoutInflater();
row = inflater.inflate(R.layout.grid_line, parent, false);
holder.imgView = (ImageView) row.findViewById(R.id.imageView);
holder.txtView = (TextView) row.findViewById(R.id.textView);
row.setTag(holder);
} else {
holder = (RecordHolder) row.getTag();
}
ResolveInfo resolveInfo = mAppList.get(position);
holder.imgView.setImageDrawable(resolveInfo.loadIcon(getActivity().getPackageManager()));
holder.txtView.setText(resolveInfo.loadLabel(getActivity().getPackageManager()));
return row;
}
答案 0 :(得分:0)
您可以直接使用
final ImageView imgView = (ImageView) row.findViewById(R.id.imageView);
final TextView txtView = (TextView) row.findViewById(R.id.textView);
但最好使用 ViewHolder
ViewHolder对象将每个组件视图存储在Layout的标记字段中,因此您可以立即访问它们,而无需重复查找它们。首先,您需要创建一个类来保存您的确切视图集。
答案 1 :(得分:0)
正如Gupta所说,你可以在每次需要填充行或网格时执行findviewbyid,但这样效率很低,因此最好只执行一次,然后将指针存储到每个视图在行或网格内部(存储在代表行的视图内),每次需要给行充气时,这将节省您的时间,因此您将看到性能提升。
关于文档,here您有setTag方法的文档。 您可以看到它显示:“...标签也可用于在视图中存储数据而无需借助其他数据结构。”所以您可以回答他们使用该方法的原因,以及getTag只是为了获得你之前保存的内容。