Xamarin Android拖放ListView

时间:2014-12-19 17:27:22

标签: c# android listview drag-and-drop xamarin

我试图在我的项目中拖放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

0 个答案:

没有答案