我试图在我的项目中拖放ListView。我模仿了这个项目:http://developer.android.com/shareables/devbytes/ListViewDraggingAnimation.zip,在此视频中进行了解释:https://www.youtube.com/watch?v=_BZIvjMgH-Q。我基本上只是尽力将它翻译成C#。
这只是一种作品。这是非常错误的。长按后,我可以拖动排。当我将底行拖到它上面的行时,下面的行在两行的内容之间快速闪烁,好像它们一遍又一遍地来回切换。他们没有真正切换或正确更新。
另一个问题是当我放开拖动的行时,我在hoverViewAnimator.Start()
上得到一个NullPointerException。我无法进入这种方法,因此很难确定什么是空的。
以下是与null异常相关的代码:
private void touchEventsEnded()
{
View mobileView = getViewForID(mMobileItemId);
if (mCellIsMobile || mIsWaitingForScrollFinish)
{
mCellIsMobile = false;
mIsWaitingForScrollFinish = false;
mIsMobileScrolling = false;
mActivePointerId = INVALID_POINTER_ID;
if (mScrollState != (int)ScrollState.Idle)
{
mIsWaitingForScrollFinish = true;
return;
}
mHoverCellCurrentBounds.OffsetTo(mHoverCellOriginalBounds.Left, mobileView.Top);
ObjectAnimator hoverViewAnimator = ObjectAnimator.OfObject(mHoverCell, "bounds", new sBoundEvaluator(), mHoverCellCurrentBounds);
hoverViewAnimator.Update += (sender, e) =>
{
Invalidate();
};
hoverViewAnimator.AnimationStart += (sender, e) =>
{
Enabled = false;
};
hoverViewAnimator.AnimationEnd += (sender, e) =>
{
mAboveItemId = INVALID_ID;
mMobileItemId = INVALID_ID;
mBelowItemId = INVALID_ID;
mobileView.Visibility = ViewStates.Visible;
mHoverCell = null;
Enabled = true;
Invalidate();
};
hoverViewAnimator.Start(); // null pointer exception thrown here
}
else
touchEventsCancelled();
}
如果您有足够的勇气来完成我的更多代码,其余部分就是:
DragableListView.cs:http://pastebin.com/bVQcY7Zj
IDragableAdapter.cs:http://pastebin.com/LGz0swDr
BaseDragableAdapter.cs:http://pastebin.com/n15bc56K