在某些设备上的2个活动之间,拖放操作不起作用

时间:2018-10-09 00:04:36

标签: android drag-and-drop

我使用以下代码将视图从活动拖动到应用程序中的另一个活动。知道拖动开始时第二个活动(接收放置事件)没有创建/未激活。

效果很好

三星Note 3 Android 5 API 21, 三星Note 4 Android 6.0.1 API 23

但无法使用

ASUS ZenPad 8.0 Android 5.1.1 API 22, Le Max 2 Android 6.0 API 23

您的想法受到赞赏。

开始拖动操作:

public boolean onItemLongClick(AdapterView<?> aParent, View aView, int aPos, long aID) {

    View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(aView);

    Intent intent = prepDNDIntent();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        aView.startDragAndDrop(ClipData.newIntent(DRAG_N_DROP_DESCRIPTION, intent), shadowBuilder, null, 0);
    } else {
        aView.startDrag(ClipData.newIntent(DRAG_N_DROP_DESCRIPTION, intent), shadowBuilder, null, 0);
    }


    startMainActivity();

    finishThisActivity();

    return true;
}

接收放置操作

public boolean validDragNDropOperation(View aView, DragEvent aEvent){
    boolean status = false;

    ClipDescription clipDescription = aEvent.getClipDescription();
    if (clipDescription != null && clipDescription.getLabel().toString().equalsIgnoreCase(DRAG_N_DROP_DESCRIPTION)) {
        status = true;
    }

    return status;
}


public boolean onDrag(View aView, DragEvent aEvent) {

    switch (aEvent.getAction()) {
          case DragEvent.ACTION_DRAG_STARTED:

               This is not called on some devices

               return validDragNDropOperation(aView, aEvent, false);

          case DragEvent.ACTION_DROP:
                 break;
    }

    return true;
}

我知道我同时将两个Activity都设置为android:launchMode =“ standard”和“ singleTask” ,但最终得到了相同的结果。

编辑

在测试过程中,我使用了一个AlertDialog来保存被拖动的视图(而不是使用活动),并且在将视图从AlertDialog拖动到活动(拥有AlertDialog的活动)时遇到相同的问题,未调用ACTION_DRAG_STARTED

0 个答案:

没有答案