基本上,它包括创建自定义 Adapter,将 ArrayAdapter扩展为包含 ListView的活动的内部类。然后在这个适配器上设置一个 onTouchListener到您的 List Items,它将发出拖动开始的信号。
在这个 Gist 中,他们将侦听器设置为 List Item 布局的特定部分(该条目的“句柄”) ,这样就不会因为按下其中的任何部分而意外地移动它。就个人而言,我更喜欢使用 onLongClickListener,但这取决于你的决定。以下是这一部分的节选:
public class MyArrayAdapter extends ArrayAdapter<String> {
private ArrayList<String> mStrings = new ArrayList<String>();
private LayoutInflater mInflater;
private int mLayout;
//constructor, clear, remove, add, insert...
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
View view = convertView;
//inflate, etc...
final String string = mStrings.get(position);
holder.title.setText(string);
// Here the listener is set specifically to the handle of the layout
holder.handle.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
startDrag(string);
return true;
}
return false;
}
});
// change color on dragging item and other things...
return view;
}
}