>  기사  >  Java  >  ListAdapter를 사용하여 RecyclerView에서 정확한 검색 텍스트 강조 표시를 보장하는 방법은 무엇입니까?

ListAdapter를 사용하여 RecyclerView에서 정확한 검색 텍스트 강조 표시를 보장하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-22 05:12:21953검색

How to Ensure Accurate Search Text Highlighting in RecyclerView with ListAdapter?

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

ListAdapter로 구동되는 RecyclerView와 함께 SearchView를 사용할 때 검색을 적절하게 강조 표시하는 것이 중요합니다. 결과. 그러나 목록의 첫 번째 CardView 또는 아래의 다른 항목이 검색 텍스트를 강조 표시하지 않거나 강조 표시가 일관되지 않게 발생하는 일반적인 문제가 발생합니다.

이 동작의 이유는 ListAdapter가 보기를 업데이트하는 데 사용하는 백그라운드 스레드에 있습니다. , 잠재적으로 초기 렌더링 중에 데이터 세트를 사용할 수 없게 될 수 있습니다. 이 문제를 해결하려면 다음 조치를 고려하세요.

  • 항목 비교 사용: 제출된 목록을 비교하여 어떤 항목이 변경되었는지 확인하고 적절한 보기 업데이트를 실행하도록 하세요.
  • 카드 모델 수정: 카드 모델에 searchString 속성을 도입합니다. 필터링할 때 업데이트된 검색 문자열로 새 카드 인스턴스를 생성하세요. 이렇게 하면 전체 데이터 변경이 트리거되어 ListAdapter가 각 기존 항목에 대해 onBindViewHolder()를 호출하게 됩니다.

예제 코드

// In the ListAdapter
public class CardRVAdapter extends ListAdapter<Card, CardRVAdapter.ViewHolder> {

    private String searchString = "";

    public void setFilter(List<Card> newSearchList, String searchText) {
        if (newSearchList != null && !newSearchList.isEmpty()) {
            this.searchString = searchText;
            List<Card> filteredList = new ArrayList<>();
            for (Card card : newSearchList) {
                Card newCard = new Card(card);
                newCard.setSearchString(searchText);
                filteredList.add(newCard);
            }
            submitList(filteredList);
        }
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        final Card card = getCardAt(position);
        if (card != null) {
            holder.bindData(card, position);
        }
    }
}

// In the Card model
public class Card {

    private String searchString;

    public Card(String todo, String searchString) {
        // Constructor with both original todo and search string
    }

    public String getSearchString() {
        return searchString;
    }

    public void setSearchString(String searchString) {
        this.searchString = searchString;
    }
}

이러한 변경 사항을 구현하면 스크롤이나 초기에 관계없이 ListAdapter를 사용하면 RecyclerView에서 검색 텍스트를 정확하게 강조표시할 수 있습니다. 렌더링합니다.

위 내용은 ListAdapter를 사용하여 RecyclerView에서 정확한 검색 텍스트 강조 표시를 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.