我使用以下代码将视图从活动拖动到应用程序中的另一个活动。知道拖动开始时第二个活动(接收放置事件)没有创建/未激活。
效果很好
三星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