繁体   English   中英

选择了RecyclerView项目以及如何禁用触摸事件

[英]RecyclerView item selected and how to disable Touch events

关于如何执行简单的RecyclerView click事件处理程序,有各种各样的材料,但是我找不到所需的基本功能的帮助。 我希望能够long tap按一个项目,使其变为选中状态(请参阅如何更改高程和颜色以使其显示为选中状态)。 然后,例如,如果在“ Fragment我想基于单击的“ Toolbar删除按钮从RecyclerView删除一项,那么如果Google建议我们不保留适配器的位置实例,该怎么办?在课外。

我从23.2.0支持库中实现了一个BottomSheet ,它出现在我的RecyclerView上方,但是单击仍在进行,就像我在控制RecyclerView本身一样,但我的顶部还有一个BottomSheet 我如何才能真正“禁用”它?

我试过了 :使用一个接口 ,将clickable=true设置为顶部布局视图。

我的RecyclerAdapter

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.EventViewHolder> {
private List<Event> eventsList;
private int selected_position = -1;
private RecyclerView recyclerView;



Typeface font;
Typeface fontBold;

public RecyclerAdapter(List<Event> eventsList, RecyclerView recyclerView) {
    this.eventsList = eventsList;
    this.recyclerView = recyclerView;
}

@Override
public RecyclerAdapter.EventViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.
            from(parent.getContext()).
            inflate(R.layout.events_cardview, parent, false);

    font = Typeface.createFromAsset(itemView.getContext().getAssets(), "ubuntu-l.ttf");
    fontBold = Typeface.createFromAsset(itemView.getContext().getAssets(), "ubuntu-b.ttf");

    return new EventViewHolder(itemView);
}


@Override
public void onBindViewHolder(RecyclerAdapter.EventViewHolder eventViewHolder,final int position) {


    if(selected_position == position){
        // Here I am just highlighting the background
        eventViewHolder.cardView.setCardBackgroundColor(ContextCompat.getColor(MyApplication.getAppContext(), R.color.tealfifty));
        if (Build.VERSION.SDK_INT >= 21) {
            eventViewHolder.itemView.setElevation(10f);
            eventViewHolder.itemView.setTranslationZ(10f);
        }
    }else{
        if (Build.VERSION.SDK_INT >= 21) {
            eventViewHolder.itemView.setElevation(2f);
            eventViewHolder.itemView.setTranslationZ(2f);
        }
        eventViewHolder.cardView.setCardBackgroundColor(ContextCompat.getColor(MyApplication.getAppContext(), R.color.white));
    }

    eventViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RecyclerView.LayoutManager lm = recyclerView.getLayoutManager();

            // Updating old as well as new positions
            notifyItemChanged(selected_position);
            selected_position = position;
            notifyItemChanged(selected_position);
            lm.scrollToPosition(selected_position);
        }
    });

    Event event = eventsList.get(position);
    eventViewHolder.itemView.setTag(R.integer.EVENT_OBJECT_TAG, event);
....

尝试这个。

mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            return true;
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {

        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }
    });

我在onInterceptTouchEvent返回true,但在触摸项目回收器视图之后无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM