Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何在recyclerview上启用和禁用拖放大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Recyclerview,允许在编辑模式下拖放项目.一旦用户退出编辑模式,我需要禁用拖放功能.

我试过改变ItemTouchCallBACk中的东西,包括移动标志和isLongPressDragEnabled无济于事.长按继续开始拖动事件.

我目前的解决方案是分离并重新连接片段,然后再次进入编辑模式时添加回调,但是我希望有一些更清洁的东西,我想念.

打回来:

public class ItemTouchCallBACk extends itemtouchhelper.CallBACk {


private final itemtouchhelperAdapter mAdapter;

public ItemTouchCallBACk(itemtouchhelperAdapter mAdapter) {
    this.mAdapter = mAdapter;
}

@Override
public int getMovementFlags(RecyclerView recyclerView,RecyclerView.ViewHolder viewHolder) {
    int dragFlags = itemtouchhelper.START | itemtouchhelper.END |itemtouchhelper.DOWN | itemtouchhelper.UP;
    return makeMovementFlags(dragFlags,0);
}

@Override
public Boolean onMove(RecyclerView recyclerView,RecyclerView.ViewHolder viewHolder,RecyclerView.ViewHolder target) {
    mAdapter.onItemMove(viewHolder.getAdapterPosition(),target.getAdapterPosition());
    return true;
}

@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder,int direction) {

}

@Override
public Boolean isLongPressDragEnabled() {
    return true;
}


@Override
public Boolean isItemViewSwipeEnabled() {
    return false;
}

@Override
public void onSELEctedChanged(RecyclerView.ViewHolder viewHolder,int actionStatE) {
    if (actionState != itemtouchhelper.ACTION_STATE_IDLE) {
        if (viewHolder instanceof itemtouchhelperViewHolder) {
            itemtouchhelperViewHolder itemViewHolder = (itemtouchhelperViewHolder) viewHolder;
            itemViewHolder.onItemSELEcted();
        }
    }
    super.onSELEctedChanged(viewHolder,actionStatE);
}

@Override
public void clearView(RecyclerView recyclerView,RecyclerView.ViewHolder viewHolder) {
    if (viewHolder instanceof itemtouchhelperViewHolder) {
        itemtouchhelperViewHolder itemViewHolder = (itemtouchhelperViewHolder) viewHolder;
        itemViewHolder.onItemClear();
    }
}
}

适配器:

public interface itemtouchhelperAdapter {

void onItemMove(int fromPosition,int toPosition);
void onItemDismiss(int position);
}

分段:

@Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceStatE) {
    View rootView = inflater.inflate(R.layout.fragment_rectangle_switches,container,falsE);

    ButterKnife.bind(this,rootView);

    // Note: title set by AmbientPagerFragment

    layoutManager = new linearlayoutmanager(getActivity(),linearlayoutmanager.HORIZONTAL,falsE);
    recyclerView.setLayoutManager(layoutManager);

    adapter = new SwitchAdapter(switchList,dimmableList,ghostList,editMode,bus);
    recyclerView.setAdapter(adapter);

    displaySwitches();
    return rootView;
}

@Override
public Boolean onOptionsItemSELEcted(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.icon_edit:
            editMode = true;
            changeEditMode();
            break;
        case R.id.icon_cancel:
            editMode = false;
            changeEditMode();
            break;
    }
    return super.onOptionsItemSELEcted(item);
}

public void changeEditMode() {
    bus.post(new EditModeEvent(editModE));

    reattachFragment();

    displaySwitches();
    getActivity().invalidateOptionsMenu();
}

private void displaySwitches() {

    if (editModE) {
        callBACk = new ItemTouchCallBACk((itemtouchhelperAdapter) adapter);
        mTouchHelper = new itemtouchhelper(callBACk);
        mTouchHelper.attachToRecyclerView(recyclerView);
        }
    }

private void reattachFragment(){
    ft = getFragmentManager().begintransaction();
    ft.detach(this).attach(this).commit();
}

谢谢.

解决方法

这就是我这样做的方式:
if(mode == MODE_@R_874_5746@{
  touchHelper.attachToRecyclerView(recyclerView);
}else if(mode == MODE_EDIT){
  touchHelper.attachToRecyclerView(null);
}

大佬总结

以上是大佬教程为你收集整理的android – 如何在recyclerview上启用和禁用拖放全部内容,希望文章能够帮你解决android – 如何在recyclerview上启用和禁用拖放所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。