有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用SelectionTracker在RecycleView中删除项目

我有一个RecyclerView,我正在实现一个SelectionTracker。在我的RecyclerView的每个项目中,我都有一个imageview,其中有一个OnClickListener要删除。选择SelectionTracker项的状态时,不会触发要删除的OnClickListener

enter image description here

  1. 我的SelectionTracker生成器:

    SelectionTracker<Long> selectionTracker = new SelectionTracker.Builder(
        "macro-item-selection-tracker",
        mRecyclerView,
        new MacroItemRecyclerViewAdapter.PositionKeyProvider(mMacroItemsAdapter),
        new MacroItemDetailsLookup(mRecyclerView),
        StorageStrategy.createLongStorage())
        .withSelectionPredicate(SelectionPredicates.createSelectSingleAnything())
        .build();
    
  2. 删除单击侦听器:

    public class DeleteMacroItemClickListener implements View.OnClickListener {
          @Override
          public void onClick(View view) {
              MacroItemViewHolderAction actions = getViewHolderActionSafety(view);
              actions.handleClickDeleteMacroItem(mMacroItem);
          }
    }
    
  3. inSelectionHotspot for identify单击区域图像删除:

    @Override
    public boolean inSelectionHotspot(@NonNull MotionEvent e) {
         Rect rect = new Rect();
         mDeleteMacroItem.getDrawingRect(rect);
         int[] locationOnScreen = new int[2];
         mDeleteMacroItem.getLocationOnScreen(locationOnScreen);
         if (((e.getRawX() > locationOnScreen[0] && (e.getRawX() < locationOnScreen[0] + mDeleteMacroItem.getWidth())))
                            && (e.getRawY() > locationOnScreen[1] && (e.getRawY() < locationOnScreen[1] + mDeleteMacroItem.getHeight()))) {
                return false;
          } else {
                return true;
          }
    //     return !rect.contains((int) e.getX(), (int) e.getY());
    }
    

共 (1) 个答案

  1. # 1 楼答案

    在选择跟踪器中添加一个观察者

    像这样:

    selectionTracker?.addObserver(object : SelectionTracker.SelectionObserver<Long>(){
        override fun onSelectionChanged() {
            super.onSelectionChanged()
            //onClick for that ImageView
        }
    })