我试图在convertView上调用拖动侦听器。

我无法使用以上代码访问longclick侦听器或拖动侦听器。我长按了gridview中的图像,该图像显示的蓝色背景比该图像稍大,但是该图像不会拖动到gridview中的其他位置。

最佳答案

"Variable 'myDragListener' is never used"提示myDragListener不在同一个Java类中(在您的情况下-您的自定义适配器),或者不可访问(例如,如果在另一个类中将myDragListener声明为public static,则可以访问它)。

要解决此问题,必须使myDragListener可以访问,或者改为使适配器自己实现View.OnDragListener,如以下示例所示:

public class ImageAdapter extends BaseAdapter implements View.OnDragListener{ //Edited

    Context context;
    LayoutInflater inflater;


    public MyAdapter(Context context) {
        this.context = context;
        inflater = LayoutInflater.from(context);
    }


getView()函数:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.activity_column, null);
        viewHolder = new ViewHolder((ImageView) convertView.findViewById(R.id.ColPhoto));
        convertView.setTag(viewHolder);
        convertView.setOnDragListener(this); //Edited
    } else
        viewHolder = (ViewHolder) convertView.getTag();

    viewHolder.iv.setImageBitmap((Bitmap) array.get(position).get(TAG_IMG));
    viewHolder.position = position;
    return convertView;
}

@Override
public boolean onDrag(View v, DragEvent event) {
    Log.v("draglistener", "draglistener");
    switch (event.getAction()) {
        case DragEvent.ACTION_DRAG_STARTED:
        case DragEvent.ACTION_DRAG_ENTERED:
        case DragEvent.ACTION_DRAG_EXITED:
        case DragEvent.ACTION_DRAG_LOCATION:
        case DragEvent.ACTION_DRAG_ENDED:
            return true;
        case DragEvent.ACTION_DROP:
            //imageAdapter.addNewImage(v, event);
            break;
        default:
            break;
    }
    return true;
}


请注意,最好将Context作为参数传递给适配器的构造函数,而不是调用getSystemService,然后通过inflater = LayoutInflater.from(context)一次定义充气器。

另请注意,呼叫.setOnDragListener()需要API Level 11及更高版本。

10-08 07:13