Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>If you don't resolve this problem I will provide my code. But it works on Android 3.0 and above, because I use <a href="http://developer.android.com/guide/topics/ui/drag-drop.html" rel="noreferrer">android drag-n-drop framework</a></p> <pre><code>grid = (GridView) findViewById(R.id.grid); grid.setAdapter(new DragGridAdapter(items, getActivity())); .... grid.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { GridView parent = (GridView) v; int x = (int) event.getX(); int y = (int) event.getY(); int position = parent.pointToPosition(x, y); if (position &gt; AdapterView.INVALID_POSITION) { int count = parent.getChildCount(); for (int i = 0; i &lt; count; i++) { View curr = parent.getChildAt(i); curr.setOnDragListener(new View.OnDragListener() { @Override public boolean onDrag(View v, DragEvent event) { boolean result = true; int action = event.getAction(); switch (action) { case DragEvent.ACTION_DRAG_STARTED: break; case DragEvent.ACTION_DRAG_LOCATION: break; case DragEvent.ACTION_DRAG_ENTERED: v.setBackgroundResource(R.drawable.shape_image_view_small_gallery_selected); break; case DragEvent.ACTION_DRAG_EXITED: v.setBackgroundResource(R.drawable.shape_image_view_small_gallery_unselected); break; case DragEvent.ACTION_DROP: if (event.getLocalState() == v) { result = false; } else { View droped = (View) event.getLocalState(); GridItem dropItem = ((DragGridItemHolder) droped.getTag()).item; GridView parent = (GridView) droped.getParent(); DragGridAdapter adapter = (DragGridAdapter) parent.getAdapter(); List&lt;GridItem&gt; items = adapter.getItems(); View target = v; GridItem targetItem = ((DragGridItemHolder) target.getTag()).item; int index = items.indexOf(targetItem); items.remove(dropItem); items.add(index, dropItem); adapter.notifyDataSetChanged(); } break; case DragEvent.ACTION_DRAG_ENDED: v.setBackgroundResource(R.drawable.shape_image_view_small_gallery_unselected); break; default: result = false; break; } return result; } }); } int relativePosition = position - parent.getFirstVisiblePosition(); View target = (View) parent.getChildAt(relativePosition); DragGridItemHolder holder = (DragGridItemHolder) target.getTag(); GridItem currentItem = holder.item; String text = currentItem.getFile().getAbsolutePath(); ClipData data = ClipData.newPlainText("DragData", text); target.startDrag(data, new View.DragShadowBuilder(target), target, 0); } } return false; </code></pre> <p>and DragGridAdapter</p> <pre><code>public class DragGridAdapter extends BaseAdapter{ private Context context; private List&lt;GridItem&gt; items; public DragGridAdapter(List&lt;GridItem&gt; items, Context context){ this.context = context; this.items = items; } @Override public int getCount() { return items.size(); } @Override public Object getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { DragGridItemHolder holder; if (convertView == null) { holder = new DragGridItemHolder(); ImageView img = new ImageView(context); holder.image = img; convertView = img; convertView.setTag(holder); } else { holder = (DragGridItemHolder) convertView.getTag(); } holder.item = items.get(position); holder.image.setImageBitmap(items.get(position).getBitmap()); return convertView; } public List&lt;GridItem&gt; getItems() { return items; } </code></pre> <p>I hope it helps to you</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload