RecyclerView使用下面的视图滑动不检测点击

AMK*_*AMK 11 android android-recyclerview

我有这样的RecyclerView行布局

<Layout>
    <BackgroundView>        
    <ForegroundView>
</Layout>
Run Code Online (Sandbox Code Playgroud)

ItemTouchHelper用来处理前景视图上的滑动(部分)

@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
    adapter.onItemSwiped(viewHolder);
}

@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
                        float dX, float dY, int actionState, boolean isCurrentlyActive) {

    View foregroundView = ((myViewHolder)viewHolder).getForegroundView();
    getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive);

    //getSwipeLimit() used below returns the width of the delete icon
    float translationX = Math.min(-dX, ((myViewHolder) viewHolder).getSwipeLimit());
    foregroundView.setTranslationX(-translationX);
}
Run Code Online (Sandbox Code Playgroud)

我在BindViewHolder我的适配器类中为backgroundview设置了一个单击侦听器.

@Override
public void onBindViewHolder(WhiteListViewHolder holder, Cursor cursor) {
    //get name and number from the cursor here

    holder.name.setText(name);
    holder.number.setText(number);

    holder.deleteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("whitelist", "yes clicked");
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

问题是,后台视图在未刷过视图时接受点击,但在视图被刷出后,后台视图停止接受点击.

在此输入图像描述

参考上面的图像,如果我点击删除按钮,有时会恢复滑动视图并且它不会捕获点击.

如果我将整个视图滑出,单击左侧的空白区域也会返回滑动视图.

提前致谢.

小智 1

我解决了任务的第一部分 - 现在没有滑动就无法检测到。但是滑动后没有检测到点击...

 @Override
 public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
   if(actionState == ItemTouchHelper.ACTION_STATE_SWIPE){
     if (dX < 0) {
         backgroundView.setVisibility(View.VISIBLE);
     }
     else {
         backgroundView.setVisibility(View.GONE);
     }
   }
 }
Run Code Online (Sandbox Code Playgroud)