我创建了自己的扩展BaseAdapter的适配器,我将它用于GridView。我想获取元素的数量并将其放入TextView。我在我的适配器中做到了:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View gridView;
if(convertView == null){
gridView = new View(context);
gridView = inflater.inflate(R.layout.grid_element, null);
ImageView logo = (ImageView) gridView.findViewById(R.id.grid_logo);
TextView tv = (TextView) gridView.findViewById(R.id.grid_textView1);
tv.setText(level+position);
}
else
gridView = convertView;
return gridView;
}
看起来很好,直到我在启动时获得不在屏幕中的元素:
这个职位就像重置一样。 我该怎么做呢?
答案 0 :(得分:2)
当convertView不为null时,您没有正确设置TextView。试试这个:
if (convertView == null) {
gridView = inflater.inflate(R.layout.grid_element, null);
} else {
gridView = convertView;
}
ImageView logo = (ImageView) gridView.findViewById(R.id.grid_logo);
TextView tv = (TextView) gridView.findViewById(R.id.grid_textView1);
tv.setText(level + position);
答案 1 :(得分:1)
可能会帮助新的访客。
你必须知道两件事:
您需要检查convertView
是否为空,以便知道列表中的行是否尚未创建(convertView = null
)或是否正由适配器回收({{ 1}})。这称为Recycling
进程。
另一个重要的事情是View Holder Pattern
。在convertView != null
方法的每一行上调用findViewById()
对于列表填充来说很重要,并且会降低滚动性能。为避免这种情况,请创建一个静态类,其中一些视图作为类字段。如果正在创建视图(getView()
),请使用findViewById()
,并在回收时使用convertView == null
方法取回
`
getTag()