6 android drag-and-drop android-animation
我正在使用nhaarman的ListviewAnimation库https://github.com/nhaarman/ListViewAnimations,效果很好.
但是我面临以下问题:
我面临的主要问题是,我无法调试我的代码.我已经将四个必需的库直接复制/粘贴到libs文件夹中.在任何listview方法中放置调试点onItemLongClick()都不起作用.
第二个问题是,拖放listView在我的代码中不起作用.每当我尝试拖动任何列表项时,在删除列表项时,该项将采用与其拖动相同的位置.
这是我用过的代码:
listview.enableDragAndDrop();
listview.setDraggableManager(new TouchViewDraggableManager(
R.id.list_row_draganddrop_textview));
listview.setOnItemMovedListener(this);
listview.setOnItemLongClickListener(this);
@Override
public void onItemMoved(final int originalPosition, final int newPosition) {
if (mToast != null) {
mToast.cancel();
}
mToast = Toast.makeText(getApplicationContext(), "Moved"
+ swingBottomInAnimationAdapter.getItem(newPosition)
+ newPosition, Toast.LENGTH_SHORT);
mToast.show();
}
@Override
public boolean onItemLongClick(final AdapterView<?> parent,
final View view, final int position, final long id) {
if (listview != null) {
listview.startDragging(position - listview.getHeaderViewsCount());
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
每当我尝试拖动任何列表项时,在删除列表项时,该项将采用与其拖动相同的位置.
当然.处理职位变更是你的责任,你应该在onItemMoved回调中处理它:
@Override
public void onItemMoved(final int originalPosition, final int newPosition) {
if (mToast != null) {
mToast.cancel();
}
mToast = Toast.makeText(getApplicationContext(), "Moved"
+ swingBottomInAnimationAdapter.getItem(newPosition)
+ newPosition, Toast.LENGTH_SHORT);
mToast.show();
// Adapt the following to your implementation
if (originalPosition != newPosition) {
YourObject item = (YourObject) yourAdapter.getItem(originalPosition);
yourAdapter.moveItem(item, newPosition);
}
}
Run Code Online (Sandbox Code Playgroud)
上面提到的方法看起来像:
public void moveItem(YourObject item, int newIndex) {
if (mEntries != null) {
mEntries.remove(item);
mEntries.add(newIndex, item);
notifyDataSetChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
如果你浏览源代码,你会发现你正在拖动的是一个Bitmap.列表项位于其原始位置.
对于其他有同样问题的人 - Niek Haarman在GitHub上回答了这个问题.
不要看到GitHub很快就会崩溃,但是因为粘贴答案也是很好的基调,这里是:
Run Code Online (Sandbox Code Playgroud)@Override public long getItemId(int position) { return position; } @Override public boolean hasStableIds() { return true; }
position这里不是一个稳定的id.您需要一个不依赖于位置的项目的稳定ID.
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |