0

Я могу восстановить это поведение только с помощью устройства JellyBean (Android 4.1.2 на Samsung Galaxy S3). С KitKat или Lollipop эта проблема не возникала.Ending multiselect в listview удаляет элемент списка элементов

У меня есть RecyclerView со списком предметов, которые могут быть мультиселективными. Когда я выбираю несколько элементов в списке (активируется мультиселекция) и выходите из него снова, щелкнув значок в левом верхнем углу панели инструментов, некоторые элементы в списке теряют их отступы. Странно, что это не всегда происходит с одними и теми же предметами, а также не с теми же самыми каждый раз. Когда я вывожу элемент из дисплея и прокручиваю его обратно, чтобы увидеть, что отступы верны и правильны.

enter image description here

После того как я переписал метод onRebind() и повторно применяется отступы к элементу проблема не произошло столько, сколько больше - НО - это stll происходит.

@Override 
protected void onRebind() { 
    super.onRebind(); 
    mListItem.setPadding(20, 20, 20, 20); 
} 

Это IY мой DocumentHolder класс:

public class DocumentHolder extends SwappingHolder implements View.OnClickListener, View.OnLongClickListener { 
    private final RelativeLayout mListItem; 
    private final TextView mNameTextView; 
    private final ImageView mAttachmentView; 
    private final TextView mTitleTextView; 
    private final TextView mDateView; 
    private final ImageView mTypeView; 
    private Document mDocument; 
    private boolean mIsAvailableOffline; 

    @Override 
    protected void onRebind() { 
     super.onRebind(); 
     mListItem.setPadding(20, 20, 20, 20); 
    } 

    public DocumentHolder(View itemView, MultiSelector multiSelector) { 
     super(itemView, multiSelector); 

     mListItem = (RelativeLayout) itemView.findViewById(R.id.list_item_doc); 
     mNameTextView = (TextView) itemView.findViewById(R.id.list_item_document_name); 
     mAttachmentView = (ImageView) itemView.findViewById(R.id.list_item_document_attachment); 
     mDateView = (TextView) itemView.findViewById(R.id.list_item_document_date); 
     mTitleTextView = (TextView) itemView.findViewById(R.id.list_item_document_title); 
     mTypeView = (ImageView) itemView.findViewById(R.id.list_item_document_type); 

     itemView.setOnClickListener(this); 
     itemView.setOnLongClickListener(this); 
     itemView.setLongClickable(true); 
     itemView.setLongClickable(true); 
    } 

    public void bindDocument(Document document) { 
     mDocument = document; 
     mNameTextView.setText(document.getDisplayName(mFolderType)); 
     mAttachmentView.setVisibility(document.isHasAttachments() ? View.VISIBLE : View.INVISIBLE); 
     mTitleTextView.setText(document.getTitle()); 

     int iconId = IconHelper.getListItemIcon(document, true); 
     mTypeView.setImageResource(iconId); 

     mDateView.setText(DateFormatter.getShortFormattedDate(document.getReceivingDate())); 

     mNameTextView.setTextAppearance(mContext, R.style.ListItemSenderUnread); 
     mTitleTextView.setTextAppearance(mContext, R.style.ListItemTitleUnread); 
     mDateView.setTextAppearance(mContext, R.style.ListItemDateUnread); 

     // offline style 
     mIsAvailableOffline = mAttachmentService.isAvailableOffline(mDocument.getId()); 
     if (mOfflineMode) { 
      if (!mIsAvailableOffline) { 
       mNameTextView.setTextAppearance(mContext, R.style.ListItemSenderOffline); 
       mTitleTextView.setTextAppearance(mContext, R.style.ListItemTitleOffline); 
       mDateView.setTextAppearance(mContext, R.style.ListItemDateOffline); 
      } 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     if (!mOfflineMode || mIsAvailableOffline) { 
      mItemListAdapterCallbacks.onDocumentClick(this); 
     } 
    } 

    @Override 
    public boolean onLongClick(View v) { 
     if (!mOfflineMode) { 
      mItemListAdapterCallbacks.onDocumentLongClick(this); 
     } 
     return true; 
    } 

    public Document getDocument() { 
     return mDocument; 
    } 
} 

И это расположение XML файла для элемента списка:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/list_item_doc" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:padding="12dp"> 

    <TextView 
     android:id="@+id/list_item_document_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@+id/list_item_document_attachment" 
     android:ellipsize="end" 
     android:gravity="center_vertical" 
     android:minHeight="24dp" 
     android:singleLine="true" /> 

    <ImageView 
     android:id="@+id/list_item_document_attachment" 
     android:layout_width="24dp" 
     android:layout_height="24dp" 
     android:layout_alignBottom="@id/list_item_document_name" 
     android:layout_toLeftOf="@+id/list_item_document_date" 
     android:padding="4dp" 
     android:src="@drawable/ic_attachment_gray" /> 

    <TextView 
     android:id="@+id/list_item_document_date" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@id/list_item_document_name" 
     android:layout_alignParentRight="true" 
     android:ellipsize="end" 
     android:gravity="center_vertical" 
     android:minHeight="24dp" 
     android:singleLine="true" /> 

    <TextView 
     android:id="@+id/list_item_document_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/list_item_document_type" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/list_item_document_name" 
     android:layout_toLeftOf="@+id/list_item_document_type" 
     android:ellipsize="end" 
     android:gravity="center_vertical" 
     android:minHeight="24dp" 
     android:paddingTop="5dp" 
     android:singleLine="true" /> 

    <ImageView 
     android:id="@+id/list_item_document_type" 
     android:layout_width="24dp" 
     android:layout_height="24dp" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/list_item_document_date" 
     android:src="@drawable/ic_folder" /> 

</RelativeLayout> 

как я могу исправить поведение, что обивка остается 12DP определенный в XML-файле макета после выхода из режима мультиселектора?

ответ

0

Наконец-то нашли решение!

Проблема лежит в файле макета XML:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/list_item_doc" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:padding="12dp"> 

Фоновый атрибут apparenly не действует для устройств Jelly Bean. Изменение значения от

android:background="?android:attr/selectableItemBackground" 

к

android:background="@color/myBackgroundColor" 

для устройств предварительно KITKAT решить эту проблему.