Android 如何按ID筛选recyclerView?
我在筛选我的recyclerView时遇到一些问题,我正在使用适配器中的“尚未筛选”在searchView中进行搜索,但我还有一个方法可以在“仅创建具有特定ID的项”时加载recyclerView 在示例中,我有一个菜单可以设置为MenuID 1、2、3、4等,而我还有一些按钮可以设置为MenuID 1、2、3、4,用于指定某个按钮所属的菜单。因此,如果我打开活动并选择菜单1,我必须只显示属于菜单1的按钮等 我已经制作了这个方法,但是我在活动中使用它,这不是一个好的实践,所以我会将它移动到我的recyclerView适配器,并在适配器中进行过滤 以下是我在活动中过滤的方法:Android 如何按ID筛选recyclerView?,android,android-recyclerview,Android,Android Recyclerview,我在筛选我的recyclerView时遇到一些问题,我正在使用适配器中的“尚未筛选”在searchView中进行搜索,但我还有一个方法可以在“仅创建具有特定ID的项”时加载recyclerView 在示例中,我有一个菜单可以设置为MenuID 1、2、3、4等,而我还有一些按钮可以设置为MenuID 1、2、3、4,用于指定某个按钮所属的菜单。因此,如果我打开活动并选择菜单1,我必须只显示属于菜单1的按钮等 我已经制作了这个方法,但是我在活动中使用它,这不是一个好的实践,所以我会将它移动到我的r
public void FilterVariable(){
filteredVariable = new ArrayList<>();
// i check for all the items from the constructor if there are any item
// that have the same MenuID which i get with .getMenu equals to positionMenu
// positionMenu is an int value that i get when i press on a Menu and it's
// give me it's ID (onCreate by default selected menu is menu 1)
for (VariantiConstructor varianti : variantiConstructors) {
String data = varianti.getMenu();
String[] items = data.split(","+positionMenu+",");
try {
if(items[0].equals(data)){
//
}else{
filteredVariable.add(varianti);
}
}catch (Exception e){
//
}
}
}
以下是我的适配器代码:
public class AdapterVarianti extends RecyclerView.Adapter<AdapterVarianti.ExampleViewHolder> implements Filterable {
private ArrayList<VariantiConstructor> variantiConstructors;
private ArrayList<VariantiConstructor> mFilteredList;
private OnItemClickListener mListener;
public interface OnItemClickListener{
void onItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener){
mListener = listener;
}
@NonNull
@Override
public AdapterVarianti.ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.varianti_recycler,parent,false);
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
v.setLayoutParams(lp);
return new AdapterVarianti.ExampleViewHolder(v, mListener);
}
AdapterVarianti(ArrayList<VariantiConstructor> exampleList){
variantiConstructors = exampleList;
mFilteredList = variantiConstructors;
}
@Override
public void onBindViewHolder(@NonNull final AdapterVarianti.ExampleViewHolder holder, final int position) {
final VariantiConstructor item = mFilteredList.get(position);
holder.desc.setText(item.getDeskT());
holder.prepiu.setText(String.valueOf(item.getPrice()));
holder.premeno.setText(String.valueOf(item.getPacq()));
if(position % 2 == 0 ){
holder.itemView.setBackgroundColor(Color.parseColor("#17e1a0"));
}else if(position % 2 == 1){
holder.itemView.setBackgroundColor(Color.parseColor("#7EC0EE"));
}
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
mFilteredList = variantiConstructors;
} else {
ArrayList<VariantiConstructor> filteredList = new ArrayList<>();
for (VariantiConstructor androidVersion : variantiConstructors) {
if (androidVersion.getDeskT().toLowerCase().contains(charString)) {
filteredList.add(androidVersion);
}
}
mFilteredList = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = mFilteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
mFilteredList = (ArrayList<VariantiConstructor>) filterResults.values;
notifyDataSetChanged();
}
};
}
@Override
public int getItemCount() {
return mFilteredList.size();
}
public class ExampleViewHolder extends RecyclerView.ViewHolder {
public TextView desc;
public TextView prepiu;
public TextView premeno;
ExampleViewHolder(View itemView, final OnItemClickListener listener) {
super(itemView);
desc = itemView.findViewById(R.id.Desc);
prepiu = itemView.findViewById(R.id.PrePiu);
premeno = itemView.findViewById(R.id.PreMeno);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null){
int position = getAdapterPosition();
if(position != RecyclerView.NO_POSITION){
listener.onItemClick(position);
}
}
}
});
}
}
public void removeItem(int position) {
variantiConstructors.remove(position);
notifyItemRemoved(position);
}
}