喜后,我有一个RecyclerView适配器如下: -错误的项目筛选
public class RecyclerViewAdapter extends RecyclerView.Adapter<ViewHolder> {
List<Data> list = Collections.emptyList();
Context context;
public RecyclerViewAdapter(List<Data> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//Inflate the layout, initialize the View Holder
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.apps_layout, parent, false);
ViewHolder holder = new ViewHolder(v);
return holder;
}
@Override
public void onViewDetachedFromWindow(ViewHolder holder) {
super.onViewDetachedFromWindow(holder);
((ViewHolder)holder).itemView.clearAnimation();
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//Use the provided View Holder on the onCreateViewHolder method to populate the current row on the RecyclerView
holder.title.setText(list.get(position).title);
holder.description.setText(list.get(position).description);
}
public void setFilter(List<Data> searched_data) {
list = new ArrayList<>();
list.addAll(searched_data);
notifyDataSetChanged();
}
@Override
public int getItemCount() {
//returns the number of elements the RecyclerView will display
return list.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
// Insert a new item to the RecyclerView on a predefined position
public void insert(int position, Data data) {
list.add(position, data);
notifyItemInserted(position);
}
// Remove a RecyclerView item containing a specified Data object
public void remove(Data data) {
int position = list.indexOf(data);
list.remove(position);
notifyItemRemoved(position);
}
}
现在没事了,你可以看到使用setfilter方法来筛选recyclerview列表
这里我怎么称呼它
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
List<Data> filteredModelList = filter(data, s);
adapter.setFilter(filteredModelList);
return true;
}
});
现在,当我点击它过滤器的工作原理,现在罚款的位置是错误的
我知道从位置上点击老recyclerview来的误差有老位置索引我不知道如何反正修复它在这里是onclicklistener
data = appsdata(); // load the list List<Data>
Collections.sort(data); // sorting
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
adapter = new RecyclerViewAdapter(data, this);
recyclerView.setAdapter(adapter);
recyclerView.setNestedScrollingEnabled(false);
recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, recyclerView, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
String s = data.get(position).title;
String ss = data.get(position).description;
Intent intent = new Intent(MainAcitivity.this, Work.class);
intent.putExtra("title", s);
intent.putExtra("desc", ss);
startActivity(intent);
}
}));
我知道这条线是造成问题
String s = data.get(position).title;
,因为它是一样大的时候,并没有过滤名单,我怎么可以更新此recyclerview,这样我可以发动Work.class
so setFilter(清单 Searches_data),不需要,在修改原始对象的适配器中,只需在修改后调用adapter.notifyDatasetChange(),即可。 – Remario
这不会工作,或者由于我使用的列表仍然是旧的,因为我从该列表中获得位置,并且旧列表有 –
只是试试它,是吗? – Remario