我使用列表适配器显示一组图像视图。我动态地在程序中设置它们的ID。问题是当我将适配器向右滚动时,图像只有在它们出现在屏幕上时才会获得它们的ID。当我再次向左滚动时,先前图像的ID将重置为新值。我怎么能停止这样的行为并在活动开始时设置所有图像的ID?
工作如图所示。旧图像每次进入活动屏幕时都会获得一个新ID,这会产生通过旧ID访问它的问题。 我的图像适配器代码:
public View getView(final int position, View convertView,ViewGroup parent)
{
final ImageView i = new ImageView(thView.getView().getContext());
Bitmap bm;
try {
bm = thView.getBitmapFromAsset(lis.get(position));
bm = Bitmap.createScaledBitmap(bm, 100, 100, false);
} catch (IOException e) {
e.printStackTrace();
bm=null;
}
i.setImageBitmap(bm);
final RelativeLayout borderImg = new RelativeLayout(thView.getView().getContext());
i.setId(x);
Log.w("ID set as",""+x);
i.setTag(IMAGEVIEW_TAG);
x++;
borderImg.addView(i);
i.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
fname = lis.get(position);
ClipData.Item item = new ClipData.Item((CharSequence) v
.getTag());
dragData = new ClipData(
(CharSequence) v.getTag(),
new String[] { ClipDescription.MIMETYPE_TEXT_PLAIN },
item);
View.DragShadowBuilder myShadow = new MyDragShadowBuilder(i);
v.startDrag(dragData, myShadow, null, 0);
return false;
}
});
myDragEventListener mDragListen = new myDragEventListener();
i.setOnDragListener(mDragListen);
return borderImg;
}
}
答案 0 :(得分:1)
什么是x
?如果x
取决于位置,那么为什么不使用它,因为你总是拥有它?
如果没有真正解决AdapterView的含义,你就无法做你想做的事。此外,如果您在开始时渲染所有图像视图,则可能会遇到内存不足问题。
我想真正的问题是你想用ID完成什么?