Android 带有 BaseAdapter 拖放排序的列表视图
Android List View with BaseAdapter Drag and Drop sort
我在列表视图中有一个记录列表,我希望用户能够使用拖放方法对其进行重新排序。 我正在为该列表视图使用 BaseAdapter。
我还没有找到它的教程。任何人都可以为我指出一些代码吗?
这是提供 DragDrop 的列表视图 link functionality.Check This link
将您的列表视图替换为
<com.terlici.dragndroplist.DragNDropListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
在你的activityclass
DragNDropListView list = (DragNDropListView)findViewById(android.R.id.list);
DragNDropCursorAdapter adapter = new DragNDropCursorAdapter(context,
R.layout.row,
cursor,
new String[]{"text"},
new int[]{R.id.text},
R.id.handler);
list.setDragNDropAdapter(adapter);
它还提供了拖放界面,正是你想要的。
listView.setDropListener(onDrop);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
private DragSortListView.DropListener onDrop = new DragSortListView.DropListener() {
@Override
public void drop(int from, int to) {
if (from != to) {
// DragSortListView list = listView;
YourModel item = adapter.getItem(from);
adapter.remove(item);
adapter.insert(item, to)
}
};
在baseadapter中添加以下方法
public void remove(YourModel item) {
aryList.remove(item);
notifyDataSetChanged();
}
public void insert(YourModel item, int position) {
aryList.add(position, item);
notifyDataSetChanged();
}
在 Xml 中:
<com.mobeta.android.dslv.DragSortListView
android:id="@+id/lstvw"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@null"
android:scrollbars="none"
dslv:collapsed_height="1px"
dslv:drag_enabled="true"
dslv:drag_handle_id="@+id/drag_handle1"
dslv:drag_scroll_start="0.33"
dslv:drag_start_mode="onDown"
dslv:float_alpha="0.6"
dslv:remove_enabled="false"
dslv:slide_shuffle_speed="0.3" />
使用 ListView 的拖放代码由 Google 团队 @ ListViewDraggingAnimation zip. There is a video explaining the internal code @ ListView Cell Dragging and Rearranging 的新手开发人员提供。 DynamicListView中的代码你不用看懂。
开始的示例代码:
StableArrayAdapter adapter = new StableArrayAdapter(this, R.layout.text_view, mCheeseList);
DynamicListView listView = (DynamicListView) findViewById(R.id.listview);
listView.setCheeseList(mCheeseList);
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
备注:
- 使用“this”对象调用
StableArrayAdapter
构造函数在 Activity 中有效。如果在 Fragment subclass 上,请使用 getContext() 或类似方法。
- ArrayList
mCheeseList
就是一个例子。使用适合您的代码的另一个列表。就个人而言,我想使用我自己的自定义 class 而不是简单的 ArrayList
- 同样,如果您像我一样使用 Fragment,请使用 view.findViewById 而不是
findViewById
方法调用。
- 最后,也许最重要的是示例使用了流行的 ArrayAdapter subclass、StableArrayAdapter。这可以很容易地更改为使用 BaseAdapter subclass (适合您的代码)。您必须以某种方式将数据传递给 StableArrayAdapter,这是最主要的。有趣的是,在 StableArrayAdapter class 中唯一使用 ArrayAdapter 的代码是
getItem
方法调用。
- 我在 Whosebug Drag and Drop for listview of views 上找到了一个有趣的 BaseAdapter subclass 代码示例。这可能值得更多关注。
就我个人而言,这是我第一次实现拖放功能。该代码提供了一个带有一个 TextView 的相当简单的示例。我需要在我的布局中使用 3 个 UI 元素而不是一个来自定义它。我想我可以根据自己的需要自定义 Google 的示例代码,这是一个共同的目标。
我希望这篇 post 和我的笔记能对其他人有所帮助,因为拖放功能尚未开发到 Android SDK 中,并且非常需要一个。
祝你好运,玩得开心...Tommy Kwee
使用模型的数组列表。
private ArrayList<YourModel> albumList = new ArrayList<YourModel>();
//add item in your list.
DragSortListView listView = (DragSortListView) findViewById(R.id.lv_test);
ReorderAlbumAdapter adapter = new ReorderAlbumAdapter(this, albumList);
listView.setAdapter(adapter);
listView.setDropListener(onDrop);
listView.setRemoveListener(onRemove);
private DragSortListView.DropListener onDrop = new DragSortListView.DropListener() {
@Override
public void drop(int from, int to) {
if (from != to) {
AlbumModel item = adapter.getItem(from);
adapter.remove(item);
adapter.insert(item, to);
}
}
};
private DragSortListView.RemoveListener onRemove = new DragSortListView.RemoveListener() {
@Override
public void remove(int which) {
adapter.remove(adapter.getItem(which));
}
};
XML 对于列表视图是:
<com.mobeta.android.dslv.DragSortListView
android:id="@+id/lv_test"
android:layout_width="match_parent"
android:layout_height="match_parent"
dslv:collapsed_height="2dp"
dslv:drag_enabled="true"
dslv:drag_handle_id="@drawable/ic_launcher"
dslv:drag_scroll_start="0.33"
dslv:drag_start_mode="onMove"
dslv:float_alpha="0.6"
dslv:max_drag_scroll_speed="0.5"
dslv:remove_enabled="true"
dslv:remove_mode="flingRemove"
dslv:slide_shuffle_speed="0.3"
dslv:sort_enabled="true"
dslv:track_drag_sort="false"
dslv:use_default_controller="true" />
您应该为您的模型使用 arrayadapter。希望对你有帮助。
我在列表视图中有一个记录列表,我希望用户能够使用拖放方法对其进行重新排序。 我正在为该列表视图使用 BaseAdapter。 我还没有找到它的教程。任何人都可以为我指出一些代码吗?
这是提供 DragDrop 的列表视图 link functionality.Check This link
将您的列表视图替换为
<com.terlici.dragndroplist.DragNDropListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
在你的activityclass
DragNDropListView list = (DragNDropListView)findViewById(android.R.id.list);
DragNDropCursorAdapter adapter = new DragNDropCursorAdapter(context,
R.layout.row,
cursor,
new String[]{"text"},
new int[]{R.id.text},
R.id.handler);
list.setDragNDropAdapter(adapter);
它还提供了拖放界面,正是你想要的。
listView.setDropListener(onDrop);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
private DragSortListView.DropListener onDrop = new DragSortListView.DropListener() {
@Override
public void drop(int from, int to) {
if (from != to) {
// DragSortListView list = listView;
YourModel item = adapter.getItem(from);
adapter.remove(item);
adapter.insert(item, to)
}
};
在baseadapter中添加以下方法
public void remove(YourModel item) {
aryList.remove(item);
notifyDataSetChanged();
}
public void insert(YourModel item, int position) {
aryList.add(position, item);
notifyDataSetChanged();
}
在 Xml 中:
<com.mobeta.android.dslv.DragSortListView
android:id="@+id/lstvw"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@null"
android:scrollbars="none"
dslv:collapsed_height="1px"
dslv:drag_enabled="true"
dslv:drag_handle_id="@+id/drag_handle1"
dslv:drag_scroll_start="0.33"
dslv:drag_start_mode="onDown"
dslv:float_alpha="0.6"
dslv:remove_enabled="false"
dslv:slide_shuffle_speed="0.3" />
使用 ListView 的拖放代码由 Google 团队 @ ListViewDraggingAnimation zip. There is a video explaining the internal code @ ListView Cell Dragging and Rearranging 的新手开发人员提供。 DynamicListView中的代码你不用看懂。
开始的示例代码:
StableArrayAdapter adapter = new StableArrayAdapter(this, R.layout.text_view, mCheeseList);
DynamicListView listView = (DynamicListView) findViewById(R.id.listview);
listView.setCheeseList(mCheeseList);
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
备注:
- 使用“this”对象调用
StableArrayAdapter
构造函数在 Activity 中有效。如果在 Fragment subclass 上,请使用 getContext() 或类似方法。 - ArrayList
mCheeseList
就是一个例子。使用适合您的代码的另一个列表。就个人而言,我想使用我自己的自定义 class 而不是简单的 ArrayList - 同样,如果您像我一样使用 Fragment,请使用 view.findViewById 而不是
findViewById
方法调用。 - 最后,也许最重要的是示例使用了流行的 ArrayAdapter subclass、StableArrayAdapter。这可以很容易地更改为使用 BaseAdapter subclass (适合您的代码)。您必须以某种方式将数据传递给 StableArrayAdapter,这是最主要的。有趣的是,在 StableArrayAdapter class 中唯一使用 ArrayAdapter 的代码是
getItem
方法调用。 - 我在 Whosebug Drag and Drop for listview of views 上找到了一个有趣的 BaseAdapter subclass 代码示例。这可能值得更多关注。
就我个人而言,这是我第一次实现拖放功能。该代码提供了一个带有一个 TextView 的相当简单的示例。我需要在我的布局中使用 3 个 UI 元素而不是一个来自定义它。我想我可以根据自己的需要自定义 Google 的示例代码,这是一个共同的目标。
我希望这篇 post 和我的笔记能对其他人有所帮助,因为拖放功能尚未开发到 Android SDK 中,并且非常需要一个。 祝你好运,玩得开心...Tommy Kwee
使用模型的数组列表。
private ArrayList<YourModel> albumList = new ArrayList<YourModel>();
//add item in your list.
DragSortListView listView = (DragSortListView) findViewById(R.id.lv_test);
ReorderAlbumAdapter adapter = new ReorderAlbumAdapter(this, albumList);
listView.setAdapter(adapter);
listView.setDropListener(onDrop);
listView.setRemoveListener(onRemove);
private DragSortListView.DropListener onDrop = new DragSortListView.DropListener() {
@Override
public void drop(int from, int to) {
if (from != to) {
AlbumModel item = adapter.getItem(from);
adapter.remove(item);
adapter.insert(item, to);
}
}
};
private DragSortListView.RemoveListener onRemove = new DragSortListView.RemoveListener() {
@Override
public void remove(int which) {
adapter.remove(adapter.getItem(which));
}
};
XML 对于列表视图是:
<com.mobeta.android.dslv.DragSortListView
android:id="@+id/lv_test"
android:layout_width="match_parent"
android:layout_height="match_parent"
dslv:collapsed_height="2dp"
dslv:drag_enabled="true"
dslv:drag_handle_id="@drawable/ic_launcher"
dslv:drag_scroll_start="0.33"
dslv:drag_start_mode="onMove"
dslv:float_alpha="0.6"
dslv:max_drag_scroll_speed="0.5"
dslv:remove_enabled="true"
dslv:remove_mode="flingRemove"
dslv:slide_shuffle_speed="0.3"
dslv:sort_enabled="true"
dslv:track_drag_sort="false"
dslv:use_default_controller="true" />
您应该为您的模型使用 arrayadapter。希望对你有帮助。