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 중국어 웹사이트의 기타 관련 기사를 참조하세요!