我正在使用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;
@Query("SELECT * FROM table_name WHERE 'like'=1")
fun loadFiltered(): List<DesiredObject>