BUG recyclerview 中的某些行在平板电脑中的视图寻呼机内不可点击

BUG Some row in recyclerview not clickable inside view pager in tablet

我有一个带有视图寻呼机的布局,由 2 个带有回收器视图的片段组成

前四行是可点击的,但另一行是不可点击的,这是在平板电脑模式下发生的。 在 Phone 模式下,一切正常。

奇怪的是,如果数据很短(只有 1 个字母),所有内容都可以点击,但是数据很长(超过 3 个字母),那么从第 4 行开始就不能点击了。FAB 按钮起作用了。我已经尝试过使用实体平板电脑和模拟平板电脑。

我正在使用 View Pager 2

这是一个错误吗?以及如何解决这个问题?

已编辑,我的 RecyclerView 适配器代码

private List<Craft> craftList;
private RecyclerViewClickListener clickListener;
private Context mContext;
public int selectedItem = -1;

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public TextView name ;
    public View container;
    private RecyclerViewClickListener mListener;

    public MyViewHolder(View view, RecyclerViewClickListener listener) {
        super(view);
        mListener = listener;
        name = (TextView) view.findViewById(R.id.name);
        container = view.findViewById(R.id.container);

        container.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        selectedItem = getBindingAdapterPosition();
        if(selectedItem!= RecyclerView.NO_POSITION){
            mListener.OnButtonClick(v, getBindingAdapterPosition());
            notifyDataSetChanged();
        }
    }
}

public interface RecyclerViewClickListener {
    void OnButtonClick(View view, int position);
}

public CraftAdapter(List<Craft> craftList, RecyclerViewClickListener listener) {
    this.craftList = craftList;
    clickListener = listener;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.craft_item, parent, false);
    mContext = parent.getContext();
    return new MyViewHolder(itemView,clickListener);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Craft craft = craftList.get(position);
    holder.name.setText(craft.getName());
    if(mContext.getResources().getBoolean(R.bool.is_tablet)){
        if(selectedItem == position){
            holder.container.setBackgroundResource(R.color.light_blue);
        }
        else{
            holder.container.setBackgroundResource(R.color.white);
        }
    }
}

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

浪费了这么多时间。我终于找到了根本原因。

原因是使用 LinearLayoutweight 的布局。 weight 使它不起作用,我认为这是一个错误。但我可以使用 constraintlayout

解决它
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:id="@+id/coordinator_layout">


    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <fragment android:name="CraftFragment"
            android:id="@+id/list_fragment"
            android:layout_weight="2" -->>This is the root cause
            android:layout_width="0dp" -->> This is the root cause
            android:layout_height="match_parent"
            />
        <View
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:background="@color/dark_grey2"/>
        <FrameLayout
            android:id="@+id/detail_fragment"
            android:layout_weight="3"
            android:layout_width="0dp"
            android:layout_height="match_parent" />

    </LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

所以我改成:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:id="@+id/coordinator_layout">

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment android:name="CraftFragment"
        android:id="@+id/list_fragment"
        android:layout_weight="2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/detail_fragment"
        app:layout_constraintHorizontal_weight="2"/>



    <FrameLayout
        android:id="@+id/detail_fragment"
        android:layout_weight="3"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        app:layout_constraintLeft_toRightOf="@+id/list_fragment"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintHorizontal_weight="3"/>

    <View
        android:id="@+id/divider"
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:background="@color/dark_grey2"
        app:layout_constraintLeft_toRightOf="@id/list_fragment"
        app:layout_constraintRight_toRightOf="@id/list_fragment"/>
</androidx.constraintlayout.widget.ConstraintLayout>