我试图在convertView上调用一个拖动侦听器。
我没有使用上面的代码访问longclick监听器或拖动监听器。我长按了gridview中的图像,图像显示的蓝色背景略大于图像,但图像不会拖动到gridview中的其他位置。
答案 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
及以上。