[ANDROID] RealmRecyclerViewAdapter에서 필터링 구현하는 방법
ANDROIDRealmRecyclerViewAdapter에서 필터링 구현하는 방법
해결법
-
1.publishResults에 필터링을 이동하고 새로운 결과를 평가하기 위해 UI 스레드 영역의 쿼리를 사용합니다.
publishResults에 필터링을 이동하고 새로운 결과를 평가하기 위해 UI 스레드 영역의 쿼리를 사용합니다.
private class AirportAdapter extends RealmRecyclerViewAdapter<AirportR, RecyclerView.ViewHolder> implements Filterable { Realm realm; public AirportAdapter(Context context, Realm realm, OrderedRealmCollection<AirportR> airports) { super(context, airports, true); this.realm = realm; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.airport_show, parent, false); AirportClass holder = new AirportClass(view); return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { AirportR airportR = getData().get(position); AirportClass mHolder = (AirportClass) holder; mHolder.bind(airportR); } public void filterResults(String text) { text = text == null ? null : text.toLowerCase().trim(); RealmQuery<AirportR> query = realm.where(AirportR.class); if(!(text == null || "".equals(text))) { query.contains("fieldToQueryBy", text, Case.INSENSITIVE) // TODO: change field } updateData(query.findAllAsync()); } public Filter getFilter() { AirportFilter filter = new AirportFilter(this); return filter; } private class AirportFilter extends Filter { private final AirportAdapter adapter; private AirportFilter(AirportAdapter adapter) { super(); this.adapter = adapter; } @Override protected FilterResults performFiltering(CharSequence constraint) { return new FilterResults(); } @Override protected void publishResults(CharSequence constraint, FilterResults results) { adapter.filterResults(constraint.toString()); } } private class AirportClass extends RecyclerView.ViewHolder { TextView name, country; ImageView image; public AirportClass(View itemView) { super(itemView); name = (TextView) itemView.findViewById(R.id.name); country = (TextView) itemView.findViewById(R.id.country); image = (ImageView) itemView.findViewById(R.id.imageView); } public void bind(AirportR airportR) { country.setText(airportR.getIsoCountry()); name.setText(airportR.getName()); } } }
-
2.어댑터가이 추가에 당신을 도울 수 있습니다
어댑터가이 추가에 당신을 도울 수 있습니다
fun filterResults(text: String?, realm: Realm) { var text = text text = text?.toLowerCase()?.trim { it <= ' ' } val query = realm.where(YourObject::class.java) if (!(text == null || "" == text)) { query.contains("username", text, Case.INSENSITIVE).or().contains("username2", text, Case.INSENSITIVE) } updateData(query.findAllAsync()) // or findAll() }
from https://stackoverflow.com/questions/40630322/how-to-implement-filterable-in-realmrecyclerviewadapter by cc-by-sa and MIT license
'ANDROID' 카테고리의 다른 글
[ANDROID] ADB 쉘을 통해 코드를 통해 명령을 이해 - 안드로이드 (0) | 2020.11.05 |
---|---|
[ANDROID] 반복 형태의 동적 형태 (0) | 2020.11.05 |
[ANDROID] 가까운 데이터베이스 연결에 가장 좋은 장소 (0) | 2020.11.05 |
[ANDROID] 어디에서 이클립스 ADT의 이전 버전을 찾을 수 있습니다 (0) | 2020.11.05 |
[ANDROID] 어떻게 안드로이드에서 특정 범위에서 임의의 숫자를 생성 할 수 있습니까? [복제] (0) | 2020.11.05 |