我试图在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
及更高版本。