Android: RecyclerView 및 ListAdapter의 ForegroundColorSpan 검색 텍스트 강조 문제 해결
RecyclerView에서 검색 텍스트를 강조하는 것은 특히 ListAdapter를 사용할 때 어려울 수 있습니다. . 이 문제를 해결하려면 사용자 정의 ListAdapter를 사용하여 검색 텍스트가 올바르게 강조 표시되도록 하는 잠재적인 솔루션을 살펴보겠습니다.
submitList()를 사용하여 ListAdapter의 데이터 세트를 업데이트할 때 문제가 발생합니다. 목록에서 항목을 올바르게 제거하지만 데이터가 변경되지 않은 상태로 유지되므로 기존 항목에 대해 onBindViewHolder()를 트리거하지 못합니다. 이로 인해 해당 항목에 대해 강조 표시 메커니즘이 의도한 대로 작동하지 않게 됩니다.
해결책:
이 문제를 해결하려면 필터링 논리를 수정하여 새 카드를 생성해야 합니다. 기존 모델을 내부에서 수정하는 대신 업데이트된 검색 문자열로 모델을 수정합니다. MainActivity의 수정된 코드는 다음과 같습니다.
private void filter(String searchText) { ArrayList<Card> searchList = new ArrayList<>(); for (Card cardItem : mCards) { if (cardItem.getTodo().toLowerCase().contains(searchText.toLowerCase(Locale.US))) { Card updatedCard = new Card(cardItem.getTodo(), searchText); searchList.add(updatedCard); } } if (!searchList.isEmpty()) { adapter.setFilter(searchList); }
업데이트된 검색 문자열로 새 카드 인스턴스를 생성하여 ListAdapter가 영향을 받은 항목에 대해 onBindViewHolder()를 트리거하도록 강제하여 강조 표시 메커니즘이 올바르게 작동하도록 합니다.
업데이트된 ListAdapter:
ListAdapter에서는 더 이상 필요하지 않으므로 searchString 속성을 제거합니다. 대신 검색 문자열 정보가 카드 모델에 포함됩니다. 이제 binData() 메서드는 다음과 같습니다.
void bindData(Card card) { spannable = Spannable.Factory.getInstance().newSpannable(cardBlankText2.getText().toString()); // Get any previous spans and remove them ForegroundColorSpan[] foregroundSpans = spannable.getSpans(0,spannable.length(), ForegroundColorSpan.class); // Highlight matches from search characters is Green color. if (card.getSearchText() != null) { int start = cardBlankText2.getText().toString().toLowerCase(Locale.US).indexOf(card.getSearchText().toLowerCase(Locale.US)); int end = start + card.getSearchText().length(); if (start != -1) { spannable.setSpan(getFCS(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } cardBlankText2.setText(spannable, TextView.BufferType.SPANNABLE); } }
이러한 변경 사항을 통해 검색 텍스트 강조 표시 기능은 RecyclerView에서 예상대로 작동하여 검색 문자열이 나타날 때마다 적절하게 강조 표시됩니다.
위 내용은 ListAdapter를 사용하여 RecyclerView에서 ForegroundColorSpan 검색 텍스트 강조 문제를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!