android - RecyclerView item selected 以及如何禁用 Touch 事件

标签 android touch android-recyclerview adapter

关于如何执行简单的 RecyclerView 单击事件处理程序的资料有很多,但我找不到有关此基本所需功能的帮助。我希望能够在某个项目上长按 以使其被选中(查看我如何更改高度和颜色以使其显示为已选中)。然后,如果在我的 Fragment 中,我想根据点击的 Toolbar 删除按钮从 RecyclerView 中删除一个项目,例如,如何如果 Google 建议我们不应该在类之外保留来自适配器的位置实例,我就会这样做。

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

我试过:使用interface , 将 clickable=true 设置为顶部布局 View 。

我的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,因为在触摸项目回收器 View 后没有效果。

关于android - RecyclerView item selected 以及如何禁用 Touch 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856816/

相关文章:

java - LibGDX 触摸位置坐标错误

javascript - 如果浏览器在触摸设备上,如何更改图像?

android - 在 fragment 内部进行权限检查后,RecyclerView 不会在首次启动时加载数据

java - 如何在 recyclerview 项目中获取 TextView 的值?

android - Ionic firebase 指定 google-services.json

android - 以原始分辨率检索图像

java - 将 TextView 设置为数组值

ios - SpriteKit : How to detect touches on node that began outside of node

android - CoordinatorLayout 与 RecyclerView

安卓网络