В моем приложении у меня есть RecyclerView, где я использовал метод get filter, который я использую с SearchView.
Теперь суть того, что я пытаюсь сделать, - это поиск элемента в RecyclerView ибыть в состоянии удалить его, проведя пальцем по экрану, но основная проблема заключается в том, что искомый элемент получает когда-либо позицию 0.
Так, как я могу получить правильную позицию элемента для удаления?
Вот мой код адаптера:
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ExampleViewHolder> implements Filterable {
private ArrayList<ItemModel> variantiConstructors;
private ArrayList<ItemModel> mFilteredList;
private OnItemClickListener mListener;
public interface OnItemClickListener{
void onItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener){
mListener = listener;
}
@NonNull
@Override
public ItemAdapter.ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler,parent,false);
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
v.setLayoutParams(lp);
return new ItemAdapter.ExampleViewHolder(v, mListener);
}
ItemAdapter(ArrayList<ItemModel> exampleList){
variantiConstructors = exampleList;
mFilteredList = variantiConstructors;
}
@Override
public void onBindViewHolder(@NonNull final ItemAdapter.ExampleViewHolder holder, @SuppressLint("RecyclerView") final int position) {
final ItemModel item = variantiConstructors.get(position);
holder.desc.setText(item.getCodiceArticolo());
holder.qta.setText(item.getQta());
holder.qta.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
variantiConstructors.get(position).setQta(holder.qta.getText().toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
if(position % 2 == 0 ){
holder.itemView.setBackgroundColor(Color.parseColor("#5C5C5C"));
}else if(position % 2 == 1){
holder.itemView.setBackgroundColor(Color.parseColor("#9E9E9E"));
}
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
variantiConstructors = mFilteredList;
} else {
ArrayList<ItemModel> filteredList = new ArrayList<>();
for (ItemModel movie : mFilteredList) {
if (movie.getCodiceArticolo().contains(charString.toLowerCase())) {
filteredList.add(movie);
}
}
variantiConstructors = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = variantiConstructors;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
variantiConstructors = (ArrayList<ItemModel>) filterResults.values;
notifyDataSetChanged();
}
};
}
@Override
public int getItemCount() {
return variantiConstructors.size();
}
public class ExampleViewHolder extends RecyclerView.ViewHolder {
public TextView desc;
public EditText qta;
ExampleViewHolder(View itemView, final OnItemClickListener listener) {
super(itemView);
desc = itemView.findViewById(R.id.Desc);
qta = itemView.findViewById(R.id.Qta);
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 ArrayList<ItemModel> getList(){
return variantiConstructors;
}
public void removeAt(int position) {
variantiConstructors.remove(position);
notifyItemRemoved(position);
}
}