在View Android中调用侦听器

时间:2015-08-17 15:59:51

标签: java android

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

我没有使用上面的代码访问longclick监听器或拖动监听器。我长按了gridview中的图像,图像显示的蓝色背景略大于图像,但图像不会拖动到gridview中的其他位置。

1 个答案:

答案 0 :(得分:1)

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

要解决此问题,您必须使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;
}

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

另请注意,来电.setOnDragListener()需要API Level 11及以上。