ОШИБКА в какой-то строке в recyclerview не кликабельный пейджер внутреннего просмотра в планшете

#android #android-recyclerview #android-viewpager2

Вопрос:

У меня есть макет с пейджером просмотра и состоит из 2 фрагментов с видом переработчика введите описание изображения здесь

Первый четырехрядный доступен для кликабельности, но другой не доступен для кликабельности, это происходит в режиме планшета. В телефонном режиме все работает нормально.

Странно то, что если данные короткие(только 1 буква), все доступно для кликабельности, но данные длинные(более 3 букв), то они недоступны для кликабельности из строки 4. Кнопка FAB работает. Я уже пробовал использовать физический планшет и эмулированный планшет.

Я использую Просмотр Пейджера 2

Это ошибка? И как это решить?

Отредактирован мой код адаптера RecyclerView

 private Listlt;Craftgt; 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(Listlt;Craftgt; 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(); }  

Комментарии:

1. Это тоже происходит в разделе «новые»?

2. @Arthurghev что означает раздел «новый»? Это всегда происходит на планшете(физическом и эмулируемом), но на телефоне это работает нормально. Но на телефоне в данный момент есть только 1 фрагмент, левый и правый фрагменты будут отображаться 1 на 1(список и подробности)

3. @SusiS Можете ли вы поделиться своим кодом адаптера для просмотра переработчика?

4. @LucaPizzini Конечно, я добавляю это к своему вопросу

5. @SusiS на картинке есть 2 раздела «новый» и «старый», это тоже происходит в разделе «новый»?

Ответ №1:

После того, как потратил столько времени впустую. Наконец-то я нашел первопричину.

Причиной является компоновка LinearLayout с использованием weight с. То weight , что это не работает, я думаю, что это ошибка. Но я могу решить эту проблему с помощью constraintlayout

 lt;?xml version="1.0" encoding="utf-8"?gt; lt;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"gt;    lt;LinearLayout  android:orientation="horizontal"  android:layout_width="match_parent"  android:layout_height="match_parent"gt;  lt;fragment android:name="CraftFragment"  android:id="@ id/list_fragment"  android:layout_weight="2" --gt;gt;This is the root cause  android:layout_width="0dp" --gt;gt; This is the root cause  android:layout_height="match_parent"  /gt;  lt;View  android:layout_width="1dp"  android:layout_height="match_parent"  android:background="@color/dark_grey2"/gt;  lt;FrameLayout  android:id="@ id/detail_fragment"  android:layout_weight="3"  android:layout_width="0dp"  android:layout_height="match_parent" /gt;   lt;/LinearLayoutgt; lt;/androidx.coordinatorlayout.widget.CoordinatorLayoutgt;  

Поэтому я меняю его на:

 lt;?xml version="1.0" encoding="utf-8"?gt; lt;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"gt;  lt;androidx.constraintlayout.widget.ConstraintLayout  android:layout_width="match_parent"  android:layout_height="match_parent"gt;  lt;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"/gt;     lt;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"/gt;   lt;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"/gt; lt;/androidx.constraintlayout.widget.ConstraintLayoutgt;