मैं कुछ समान कार्यान्वित कर रहा हूं। उम्मीद है कि यह किसी और की मदद करेगा क्योंकि मैं अभी भी कंकों को इस्त्री कर रहा हूं।
...
thumb.setOnDragListener(new Drag());
...
public class Drag implements OnDragListener{
public static int PositionOfDraggedItem = -1;
public int PositionOfItemDraggedOver = -1;
public Drag() {}
@Override
public boolean onDrag(View v, DragEvent event)
{
final int action = event.getAction();
boolean state = true;
View root = v.getRootView();
ListView List = (ListView) root.findViewById(android.R.id.list);
Object holder = v.getTag() instanceof OrderHolder? (OrderHolder)v.getTag() : v.getTag();
String BookId = holder instanceof OrderHolder? String.valueOf(((OrderHolder)holder).id) : (String)holder;
switch(action)
{
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_ENTERED:
if(PositionOfDraggedItem != -1)
{
if(this.PositionOfItemDraggedOver != PositionOfDraggedItem)
{
if(v.getBackground() != null)
v.setBackgroundDrawable(v.getContext().getResources().getDrawable(drawable.row_ovr));
}
}
break;
case DragEvent.ACTION_DRAG_LOCATION:
/**
* Set the item being
* here, as it will not
* provide location data
* anywhere else
*/
if(PositionOfDraggedItem == -1)
PositionOfDraggedItem = List.getPositionForView(v);
/**
* Set the view thats
* being dragged over
*/
this.PositionOfItemDraggedOver = List.getPositionForView(v);
int PositionOfLastVisibleView = List.getLastVisiblePosition();
int PositionOfFirstVisibleView = List.getFirstVisiblePosition();
if(this.PositionOfItemDraggedOver != -1 && (this.PositionOfItemDraggedOver != PositionOfDraggedItem)){
if(this.PositionOfItemDraggedOver == PositionOfLastVisibleView-1 || this.PositionOfItemDraggedOver == PositionOfLastVisibleView || this.PositionOfItemDraggedOver == PositionOfLastVisibleView+1){
List.smoothScrollToPosition(PositionOfLastVisibleView+1);
}else if(this.PositionOfItemDraggedOver == PositionOfFirstVisibleView-1 || this.PositionOfItemDraggedOver == PositionOfFirstVisibleView+1 || this.PositionOfItemDraggedOver == PositionOfFirstVisibleView){
List.smoothScrollToPosition(PositionOfFirstVisibleView-1);
}
}
break;
case DragEvent.ACTION_DRAG_EXITED:
if(v.getBackground() != null)
v.setBackgroundDrawable(v.getContext().getResources().getDrawable(drawable.row));
break;
case DragEvent.ACTION_DROP:
if(event != null)
{
ClipData data = event.getClipData();
if(data != null && data.getItemCount() > 0)
{
if(!data.getItemAt(0).getText().toString().equalsIgnoreCase(BookId))
{
if(v.getBackground() != null)
v.setBackgroundDrawable(v.getContext().getResources().getDrawable(drawable.row));
/**
* Ordering info for
* book being dragged
*/
String oShelfOrder = BookManager.item(v.getContext().getContentResolver(), dbhelper.BOOKS_SHELFORDER,
booksprovider.GetUri(dbhelper.BOOKS), Long.parseLong(data.getItemAt(0).getText().toString()));
String oBookOrder = BookManager.item(v.getContext().getContentResolver(), dbhelper.BOOKS_BOOKSORDER,
booksprovider.GetUri(dbhelper.BOOKS), Long.parseLong(data.getItemAt(0).getText().toString()));
/**
* Ordering info
* for book being dragged
* to
*/
String dShelfOrder = BookManager.item(v.getContext().getContentResolver(), dbhelper.BOOKS_SHELFORDER,
booksprovider.GetUri(dbhelper.BOOKS), Long.parseLong(BookId));
String dBookOrder = BookManager.item(v.getContext().getContentResolver(), dbhelper.BOOKS_BOOKSORDER,
booksprovider.GetUri(dbhelper.BOOKS), Long.parseLong(BookId));
/**
* Update book being dragged
*/
ContentValues args = new ContentValues();
args.put(dbhelper.BOOKS_SHELFORDER, dShelfOrder);
args.put(dbhelper.BOOKS_BOOKSORDER, dBookOrder);
BookManager.updateBook(v.getContext().getContentResolver(), data.getItemAt(0).getText().toString(), args);
/**
* Update book being dragged to
*/
ContentValues values = new ContentValues();
values.put(dbhelper.BOOKS_SHELFORDER, oShelfOrder);
values.put(dbhelper.BOOKS_BOOKSORDER, oBookOrder);
BookManager.updateBook(v.getContext().getContentResolver(), BookId, values);
if(v.getContext() instanceof OrderBooks){
((OrderBooks)v.getContext()).adapter.refresh();
((OrderBooks)v.getContext()).adapter.notifyDataSetChanged();
PositionOfDraggedItem = -1;
}
}
}
}
break;
case DragEvent.ACTION_DRAG_ENDED:
if(event != null && event.getResult())
{
v.invalidate();
}
break;
}
return state;
}
}
थोड़ी देर में इस पर काम नहीं किया है, नवीनतम परिवर्तनों के अनुसार अपडेट।
वाह, बहुत बहुत धन्यवाद! हमने इस सुविधा को स्थगित करने का फैसला किया क्योंकि इस काम को हम प्राप्त नहीं कर पाए। मैं इसे देख लूंगा और देख सकता हूं कि यह मेरी समस्या हल करता है या नहीं। मैंने आपका ब्लॉग देखा, यह सच है कि इसमें एक हफ्ते का समय लगेगा जब मैं दो दिनों में घुमाया था, मुझे इसे छोड़ना पड़ा था :) – dropsOfJupiter
महान घटक! मेरे लिए ठीक काम करता है ... THX – kyp
उपरोक्त ब्लॉग पोस्ट लिंक काम नहीं करता है लेकिन आप यहां बाकी की चीज़ों को यहां पा सकते हैं: http://codegarage.no-ip.co.uk/snippets/94 – mpemburn