0

在此处输入图像描述 我使用列表适配器显示一组图像视图。我在程序中动态设置了他们的 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;
    }
}
4

1 回答 1

1

是什么x?如果x取决于位置,那你为什么不使用它,因为你总是有它?

如果不真正了解 AdapterView 的含义,您将无法做您想做的事。此外,如果您在开始时渲染所有图像视图,您可能会遇到内存不足的问题。

我想真正的问题是你想用 ID 完成什么?

于 2012-11-22T17:24:48.917 回答