如何过滤房间中的行

问题描述 投票:1回答:1

我正在使用Room + RecyclerView。用户可以标记该记录,它将记录移到新活动的列表中,我使用boolean变量完成了此操作。我的问题是我无法撰写用户喜欢的新条目列表。但是我设法进行了动态搜索,但这不是我所需要的。

[在某些情况下,我调用getFilter方法来动态搜索整个列表。现在,我需要创建一个新列表,其中仅包含用户标记的条目。

 public class ReceptAdapter extends RecyclerView.Adapter<ReceptAdapter.NoteHolder> implements Filterable {
private List<Recept> recepts = new ArrayList<>();
private List<Recept> receptsFull;
private List<Recept> receptsChecked;
private OnItemClickListener listener;

@NonNull
@Override
public NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.recept_ingred_item, parent, false);
    return new NoteHolder(itemView);
}

@Override
public void onBindViewHolder(@NonNull NoteHolder holder, int position) {
    Recept currentRecept= recepts.get(position);
    holder.textViewTitle.setText(currentRecept.getTitle());
}

@Override
public int getItemCount() {
    return recepts.size();
}

public void setRecepts(List<Recept> recepts) {
    this.recepts = recepts;
    receptsFull = new ArrayList<>(recepts);
    receptsChecked = new ArrayList<>(recepts);
    notifyDataSetChanged();
}



public Recept getNoteAt(int position) {
    return recepts.get(position);
}



class NoteHolder extends RecyclerView.ViewHolder {
    private TextView textViewTitle;

    public NoteHolder(View itemView) {
        super(itemView);
        textViewTitle = itemView.findViewById(R.id.text_view_title);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = getAdapterPosition();
                if (listener != null && position != RecyclerView.NO_POSITION) {
                    listener.onItemClick(recepts.get(position));
                }
            }
        });
    }
}

public interface OnItemClickListener {
    void onItemClick(Recept recept);
}

public void setOnItemClickListener(OnItemClickListener listener) {
    this.listener = listener;
}






//filtered


@Override
public Filter getFilter() {
    return receptFilter;
}

private Filter receptFilter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        List<Recept> filteredList = new ArrayList<>();
        if (constraint == null || constraint.length() == 0){
            filteredList.addAll(receptsFull);
        } else {
            String filterPattern = constraint.toString().toLowerCase().trim();

            for (Recept item : receptsFull){
                if (item.getTitle().toLowerCase().contains(filterPattern)){
                    filteredList.add(item);
                }
            }
        }
        FilterResults results = new FilterResults();
        results.values = filteredList;

        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        recepts.clear();
        recepts.addAll((List) results.values);
        notifyDataSetChanged();


    }
};

选择需要按字段完成-布尔型;

public class Recept {
@PrimaryKey(autoGenerate = true)
private int id;
private String title;
private String description;
private String  ingred;
private boolean like;
android search android-recyclerview android-room recycler-adapter
1个回答
0
投票
@Query("SELECT * FROM table_name WHERE 'like'=1") fun loadFiltered(): List<DesiredObject>
© www.soinside.com 2019 - 2024. All rights reserved.