BUG recyclerview 中的某些行在平板电脑的视图寻呼机内不可点击
Posted
技术标签:
【中文标题】BUG recyclerview 中的某些行在平板电脑的视图寻呼机内不可点击【英文标题】:BUG Some row in recyclerview not clickable inside view pager in tablet 【发布时间】:2022-01-11 11:01:54 【问题描述】:我有一个带有视图寻呼机的布局,由 2 个带有回收器视图的片段组成
前四行是可点击的,但另一行不可点击,这是在平板电脑模式下发生的。 在电话模式下,一切正常。
奇怪的是,如果数据很短(只有 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();
【问题讨论】:
“新”部分是否也会发生这种情况? @Arthurghev “新”部分是什么意思?它总是发生在平板电脑(物理和模拟)上,但在手机上它工作正常。但是在手机上,当时只有1个片段,左右片段会一一显示(列表和详细信息) @SusiS 你能分享你的回收站视图适配器代码吗? @LucaPizzini 当然,我将其添加到我的问题中 @SusiS 在图片中有 2 个部分“新”和“旧”,这是否也发生在“新”部分? 【参考方案1】:浪费了这么多时间。我终于找到了根本原因。
原因是使用LinearLayout
和weight
的布局。 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_
android:layout_
android:background="@color/white"
android:id="@+id/coordinator_layout">
<LinearLayout
android:orientation="horizontal"
android:layout_
android:layout_>
<fragment android:name="CraftFragment"
android:id="@+id/list_fragment"
android:layout_weight="2" -->>This is the root cause
android:layout_ -->> This is the root cause
android:layout_
/>
<View
android:layout_
android:layout_
android:background="@color/dark_grey2"/>
<FrameLayout
android:id="@+id/detail_fragment"
android:layout_weight="3"
android:layout_
android:layout_ />
</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_
android:layout_
android:background="@color/white"
android:id="@+id/coordinator_layout">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_
android:layout_>
<fragment android:name="CraftFragment"
android:id="@+id/list_fragment"
android:layout_weight="2"
android:layout_
android:layout_
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_
android:layout_
app:layout_constraintLeft_toRightOf="@+id/list_fragment"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintHorizontal_weight="3"/>
<View
android:id="@+id/divider"
android:layout_
android:layout_
android:background="@color/dark_grey2"
app:layout_constraintLeft_toRightOf="@id/list_fragment"
app:layout_constraintRight_toRightOf="@id/list_fragment"/>
</androidx.constraintlayout.widget.ConstraintLayout>
【讨论】:
以上是关于BUG recyclerview 中的某些行在平板电脑的视图寻呼机内不可点击的主要内容,如果未能解决你的问题,请参考以下文章