> Java > java지도 시간 > ListAdapter를 사용하여 RecyclerView에서 검색된 텍스트를 강조 표시하는 방법: 가끔 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

ListAdapter를 사용하여 RecyclerView에서 검색된 텍스트를 강조 표시하는 방법: 가끔 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-11-25 12:32:11
원래의
597명이 탐색했습니다.

How to Highlight Searched Text in RecyclerView with ListAdapter: Why Does It Sometimes Fail and How Can You Fix It?

ListAdapter를 사용하여 RecyclerView에서 검색된 텍스트 강조 표시

CardView의 RecyclerView 목록 위에 있는 도구 모음 내에서 SearchView를 사용할 때 내부의 검색 텍스트를 강조 표시합니다. ListAdapter를 사용하는 CardView에 문제가 발생할 수 있습니다. 초기 CardView 및 후속 버전에서는 검색 텍스트가 올바르게 강조 표시되지 않거나 목록을 스크롤할 때까지 강조 표시가 나타나지 않을 수 있습니다.

이 문제를 해결하려면 ListAdapter의 특성을 고려하는 것이 중요합니다. ListAdapter는 백그라운드 스레드에서 보기를 업데이트하므로 데이터 세트가 즉시 처리 준비가 되지 않을 수 있습니다.

제공된 코드에서 문제는 MainActivity의 필터 메소드, 특히 다음 행에서 발생합니다.

submitList(tempList);
로그인 후 복사

이 줄은 목록의 기존 항목을 제거하고 대체합니다. RecyclerView에 있는 기존 항목의 경우 항목의 데이터가 변경되지 않기 때문에 onBindViewHolder를 트리거하지 않습니다. 따라서 이를 수정하려면 searchString 속성을 Card 모델의 일부로 정의해야 합니다.

필터링 시 기존 Card 모델을 수정하는 대신 업데이트된 검색 문자열로 새 Card 모델을 생성하세요.

public void setFilter(List<Card> newSearchList, String adapSearchText) {

    if (newSearchList != null && !newSearchList.isEmpty()) {
        this.searchString = adapSearchText.toLowerCase(Locale.US);
        ArrayList<Card> tempList = new ArrayList<>();
        for (Card card : newSearchList) {
            tempList.add(new Card(card.getTodo(), searchString));
        }
        submitList(tempList);
    }
}
로그인 후 복사

업데이트된 searchString으로 새 카드 모델을 생성하면 RecyclerView의 모든 항목에 대해 onBindViewHolder 메소드가 트리거되어 검색이 올바르게 강조 표시됩니다. 텍스트.

위 내용은 ListAdapter를 사용하여 RecyclerView에서 검색된 텍스트를 강조 표시하는 방법: 가끔 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿