我已经为 gridview 编写了一个自定义适配器。网格视图中的每个项目都有其他子视图。其中之一是一个 textView,它实现了一个点击监听器。
当用户单击 TextView 时,我会显示一个 Toast,它显示项目在 gridView 中的位置。
现在来解决问题:
每次调用 getView() 时,我都会将 getView() 返回的“位置”作为标签分配给 TextView。当我滚动时,getView() 提供的“位置”是正确的值,但是一旦滚动停止,getView() 提供的位置就会变为 0,除非我在顶部,否则它首先不应该为零的网格视图。但是,保存在 TextView 标记中的值始终是正确的值。这是为什么?
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if(convertView == null){
convertView = mLayoutIflater.inflate(R.layout.grid_item, null);
viewHolder = new ViewHolder();
…..
viewHolder.playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e(“test”, "myPos: "+ (Integer) viewHolder.mTextView.getTag()); // always returns correct position value
}
});
convertView.setTag(viewHolder);
}
else
viewHolder = (ViewHolder) convertView.getTag();
Log.e(“test”, "GETVIEW: "+ position); // position is zero when scrolling stops & correct value when scrolling
viewHolder.mTextView.setTag(position);
return convertView;
}
最好的祝福