목록보기에서 다중 선택을 종료하면 목록 항목 패딩이 제거됩니다.

도미닉

이 동작은 JellyBean 장치 (삼성 Galaxy S3의 Android 4.1.2)로만 재구성 할 수 있습니다. KitKat 또는 Lollipop에서는이 문제가 발생하지 않았습니다.

다중 선택이 가능한 항목 목록이있는 RecyclerView가 있습니다. 목록에서 몇 개의 항목을 선택하고 (다중 선택이 활성화 됨) 도구 모음의 왼쪽 상단에있는 아이콘을 클릭하여 다시 종료하면 목록의 일부 항목이 패딩을 잃게됩니다. 이상한 점은 항상 동일한 항목에 대해 발생하는 것은 아니며 매번 동일한 항목에 대해서도 발생하지 않는다는 것입니다. 디스플레이에서 항목을 스크롤하고 다시보기로 스크롤하면 패딩이 다시 올바르게 표시됩니다.

여기에 이미지 설명 입력

onRebind () 메서드를 덮어 쓰고 항목에 패딩을 다시 적용한 후 문제는 더 이상 발생하지 않았지만 stll이 발생합니다.

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

이것은 내 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>

다중 선택 모드를 종료 한 후 패딩이 레이아웃 XML 파일에 정의 된 12dp로 유지되는 동작을 어떻게 수정할 수 있습니까?

도미닉

마침내 해결책을 찾았습니다!

문제는 레이아웃 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">

배경 속성은 Jelly Bean 장치에 유효하지 않습니다. 값 변경

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

...에

android:background="@color/myBackgroundColor"

Pre-KitKat 장치의 경우 문제가 해결되었습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

목록에서 항목을 제거하면 목록의 나머지 항목이 엉망이됩니다.

분류에서Dev

목록보기 선택 항목을 설정하는 방법이 회전식보기에서 null입니다.

분류에서Dev

드롭 다운 목록에서 항목을 선택하고 목록에서 항목을 값으로 제거한 다음 합계를 업데이트합니다.

분류에서Dev

wpf는 선택한 목록보기 항목에 바인딩하고 해당 선택에 따라 다른 목록을 업데이트합니다.

분류에서Dev

목록보기에서 선택한 두 번째 항목이 올바른 값을 표시하지 않습니다.

분류에서Dev

선택한 목록보기 항목이 레이블에 표시됩니다.

분류에서Dev

easyui 필터에서 검색하면 선택 항목이 제거됩니다.

분류에서Dev

목록보기에서 이미 선택된 항목을 선택 해제하는 방법.

분류에서Dev

각 하위 목록의 세 번째 항목을 기준으로 목록 목록에서 중복 항목 제거

분류에서Dev

다른 목록의 항목을 비교하여 목록에서 항목 제거

분류에서Dev

Android 예제에서 클릭시 한 목록보기에서 다른 목록보기로 항목을 추가하는 방법이 필요합니다.

분류에서Dev

목록에서 항목을 제거하면 동일한 클래스의 다른 목록이 반영됩니다. 왜?

분류에서Dev

Vue : v-for 목록에서 항목을 제거하면 캔버스 항목이 남습니다.

분류에서Dev

목록보기 항목을 선택하면 앱이 자동으로 닫힙니다.

분류에서Dev

MVC 선택 목록이 드롭 다운에서 선택한 항목을 표시하지 않습니다.

분류에서Dev

복사 된 목록에서 항목을 제거하면 원본에서도 제거됩니다.

분류에서Dev

목록보기에서 선택한 항목을 변경하려고하면 프로그램이 충돌합니다.

분류에서Dev

목록에서 항목을 제거하는 데 어려움이 있습니다.

분류에서Dev

드래그 앤 드롭으로 목록보기 항목을 한 목록에서 다른 목록으로 이동하는 방법은 무엇입니까? UWP C #

분류에서Dev

다중 선택 목록에서 선택한 항목을 다른 다중 선택 목록으로 복사

분류에서Dev

dbl 클릭시 다중 선택 목록에서 항목 제거

분류에서Dev

목록보기에서 마지막 항목을 삭제하고 싶습니다.

분류에서Dev

중복 항목을 제거하는 목록 내에서 고유 한 이름을 선택하십시오.

분류에서Dev

중복 항목을 제거하는 목록 내에서 고유 한 이름을 선택하십시오.

분류에서Dev

목록을 제거하면 빈 값이 반환됩니다.

분류에서Dev

목록보기에서 단일 항목을 선택하고 다른 활동에서 결과 행 이름을 표시하는 방법

분류에서Dev

조건이 일치하면 다른 목록에서 항목을 선택하는 방법은 무엇입니까?

분류에서Dev

긴 목록 선택기에서 항목이 삭제되면 앱이 닫힙니다.

분류에서Dev

bash에서 목록을 에코하면 '/'가 제거됩니다.

Related 관련 기사

  1. 1

    목록에서 항목을 제거하면 목록의 나머지 항목이 엉망이됩니다.

  2. 2

    목록보기 선택 항목을 설정하는 방법이 회전식보기에서 null입니다.

  3. 3

    드롭 다운 목록에서 항목을 선택하고 목록에서 항목을 값으로 제거한 다음 합계를 업데이트합니다.

  4. 4

    wpf는 선택한 목록보기 항목에 바인딩하고 해당 선택에 따라 다른 목록을 업데이트합니다.

  5. 5

    목록보기에서 선택한 두 번째 항목이 올바른 값을 표시하지 않습니다.

  6. 6

    선택한 목록보기 항목이 레이블에 표시됩니다.

  7. 7

    easyui 필터에서 검색하면 선택 항목이 제거됩니다.

  8. 8

    목록보기에서 이미 선택된 항목을 선택 해제하는 방법.

  9. 9

    각 하위 목록의 세 번째 항목을 기준으로 목록 목록에서 중복 항목 제거

  10. 10

    다른 목록의 항목을 비교하여 목록에서 항목 제거

  11. 11

    Android 예제에서 클릭시 한 목록보기에서 다른 목록보기로 항목을 추가하는 방법이 필요합니다.

  12. 12

    목록에서 항목을 제거하면 동일한 클래스의 다른 목록이 반영됩니다. 왜?

  13. 13

    Vue : v-for 목록에서 항목을 제거하면 캔버스 항목이 남습니다.

  14. 14

    목록보기 항목을 선택하면 앱이 자동으로 닫힙니다.

  15. 15

    MVC 선택 목록이 드롭 다운에서 선택한 항목을 표시하지 않습니다.

  16. 16

    복사 된 목록에서 항목을 제거하면 원본에서도 제거됩니다.

  17. 17

    목록보기에서 선택한 항목을 변경하려고하면 프로그램이 충돌합니다.

  18. 18

    목록에서 항목을 제거하는 데 어려움이 있습니다.

  19. 19

    드래그 앤 드롭으로 목록보기 항목을 한 목록에서 다른 목록으로 이동하는 방법은 무엇입니까? UWP C #

  20. 20

    다중 선택 목록에서 선택한 항목을 다른 다중 선택 목록으로 복사

  21. 21

    dbl 클릭시 다중 선택 목록에서 항목 제거

  22. 22

    목록보기에서 마지막 항목을 삭제하고 싶습니다.

  23. 23

    중복 항목을 제거하는 목록 내에서 고유 한 이름을 선택하십시오.

  24. 24

    중복 항목을 제거하는 목록 내에서 고유 한 이름을 선택하십시오.

  25. 25

    목록을 제거하면 빈 값이 반환됩니다.

  26. 26

    목록보기에서 단일 항목을 선택하고 다른 활동에서 결과 행 이름을 표시하는 방법

  27. 27

    조건이 일치하면 다른 목록에서 항목을 선택하는 방법은 무엇입니까?

  28. 28

    긴 목록 선택기에서 항목이 삭제되면 앱이 닫힙니다.

  29. 29

    bash에서 목록을 에코하면 '/'가 제거됩니다.

뜨겁다태그

보관