如何在额外的dialogfragment中处理dragevent

iq3niunx  于 2021-07-05  发布在  Java
关注(0)|答案(0)|浏览(204)

当我对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;
       }
   });

如果有任何进一步的信息需要我当然会很乐意提供他们

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题