android - 如何禁用 ViewHolder 中的 onLongPressListener?

标签 android android-recyclerview android-viewholder

我正在尝试暂时禁用我在适配器的 ViewHolder 中设置的 onLongPressListener。我想禁用它,因为我想实现 RecyclerView 的拖放功能(以允许用户重新排列项目)。

目前,长按监听器允许用户重命名一个项目,我想当用户按下“重新排列”按钮(在工具栏中)时,我想禁用 viewHolder 的长按监听器并激活拖放功能。我不知道如何禁用在 recyclerview 的每个 View 上设置的监听器。

这是我的适配器代码:

public class GroceryItemsAdapter extends RecyclerView.Adapter<GroceryItemsAdapter.ShoppingListViewHolder> {
    private ArrayList<String> mItems;
    private Context mContext;
    private SharedPreferences mSharedPreferences;
    private SharedPreferences.Editor mEditor;
    private MaterialDialog addItemdialog;
    public static String nameOfList;

    public GroceryItemsAdapter(Context context, ArrayList<String> items, SharedPreferences preferences, SharedPreferences.Editor editor, String nameOfList) {
        mItems = items;
        mContext = context;
        mSharedPreferences = preferences;
        mEditor = editor;
        this.nameOfList = nameOfList;
    }

    @Override
    public ShoppingListViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.shopping_list_item,viewGroup,false);
        ShoppingListViewHolder viewHolder = new ShoppingListViewHolder(view);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ShoppingListViewHolder shoppingListViewHolder, int position) {
        shoppingListViewHolder.bindShoppingList(mItems.get(position));
    }

    @Override
    public int getItemCount() {
        return mItems.size();
    }

    public class ShoppingListViewHolder extends RecyclerView.ViewHolder implements CompoundButton.OnCheckedChangeListener, View.OnLongClickListener{
        public TextView mShoppingListItem;
        public CheckBox mCheckBox;
        public TextView mEmptyTextView;

        public ShoppingListViewHolder(View itemView) {
            super(itemView);
            mShoppingListItem = (TextView) itemView.findViewById(R.id.shoppingListItem);
            mCheckBox = (CheckBox) itemView.findViewById(R.id.shoppingListCheckBox);

            View rootView = ((Activity)mContext).getWindow().getDecorView().findViewById(android.R.id.content);

            mEmptyTextView = (TextView)rootView.findViewById(R.id.list_empty);
            mEmptyTextView.setVisibility(View.INVISIBLE);
            mCheckBox.setOnCheckedChangeListener(this);
            itemView.setOnLongClickListener(this);
        }
        public void bindShoppingList(String item){
            mShoppingListItem.setText(item);
            mCheckBox.setChecked(false);
        }
    }
}

最佳答案

在您的适配器上实现一个标志。

作为 LongClickListener 的第一行,检查标志。如果已设置,则不执行长按操作。您无需禁用监听器,只需阻止其包含的代码执行即可。

关于android - 如何禁用 ViewHolder 中的 onLongPressListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954373/

相关文章:

Android 本地服务示例、bindservice() 和 ServiceConnection()

安卓隐藏通知

android - RecyclerView - 当 View 不再可见时回调

java - StartActivityForResult - 检查是否存在额外的 Intent 或使用自定义结果代码?

android - 回收站以编程方式查看给定位置的 "modify"项目

android - 如何迭代 RecyclerView 中的所有 View /项目?

android - ViewHolder ImageView setVisibility 重复

android - 具有 2 个不同数据库引用的 FirebaseRecyclerAdapter - 对滚动的负面影响

android - 如果没有 onBindViewHolder 内的 anchor ,则不能使用 MenuPopupHelper

Android 日历 API : How to force sync for a specific calendar