当我对recyclerview的一个项目执行长单击时,我想开始拖动这个项目并启动一个自定义的dialogfragment。然后我想把这个项目放到dialogfragment中的cardview中。如果这很重要的话,片段中有不同的cardwiews以gridlayout作为父级。创建片段并拖动条目可以正常工作,但是我没有找到一种方法使片段响应dragevents。我已经尝试在片段的oncreateview()和onstart()方法中设置ondraglistener,但它不会响应drageEvents。我还阅读了android开发者指南中的拖放,但是没有关于拖放到另一个片段的信息。既然我无法访问底层活动中片段的视图,在那里我将onlongclicklistener实现为一个匿名内部类,那么有什么方法可以获得我想要实现的功能吗?或者我在代码中犯了什么我看不到的错误?
以下是我的onlongitemclick方法:
public void onLongItemClick(View itemView, FoodItem foodItem) {
// itemView is the View of the longClicked item in the recyclerView
// custom DialogFragment
PopUpOnLongFoodItemClick dragDialog = new PopUpOnLongFoodItemClick(foodItem, foodItemViewModel);
dragDialog.show(getSupportFragmentManager(), "dragDialogFragment");
ClipData.Item item = new ClipData.Item("notUsedTag");
ClipData dragData = new ClipData("notUsedTag",
new String[] {ClipDescription.MIMETYPE_TEXT_PLAIN},
item);
View.DragShadowBuilder dragShadowBuilder = new View.DragShadowBuilder(itemView);
itemView.startDrag(dragData, dragShadowBuilder, null, 0);
}
});
这是片段的oncreateview()/onstart方法中的ondraglistener方法
view.findViewById(R.id.CardView_fridge_in_popup_fragment).setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
final int action = dragEvent.getAction();
switch(action) {
case DragEvent.ACTION_DRAG_STARTED:
Toast.makeText(getContext(), "received DragStarted", Toast.LENGTH_SHORT).show();
return true;
case DragEvent.ACTION_DRAG_ENTERED:
view.setBackgroundColor(getResources().getColor(R.color.colorAccent));
return true;
case DragEvent.ACTION_DRAG_EXITED: return true;
case DragEvent.ACTION_DRAG_LOCATION: return true;
case DragEvent.ACTION_DROP:
draggedFoodItem.setTable(FoodItem.TABLE_FRIDGE);
foodItemViewModel.update(draggedFoodItem);
return true;
case DragEvent.ACTION_DRAG_ENDED:
dismiss();
return true;
}
return false;
}
});
如果有任何进一步的信息需要我当然会很乐意提供他们
暂无答案!
目前还没有任何答案,快来回答吧!