[英]SearchView adding wrong item from RecyclerView
实际上,我正在尝试在我的RecyclerView中添加一个SearchView,以便搜索其中的各种商品,
但是当我在SearchView中搜索一个结果时遇到了一个问题,当我单击它时就发现了所选择的项目是错误的,或者更好的是,它是来自主ArrayList的项目,而不是您在中看到的搜索结果当我按它的小吃店说我已经选择了贝勒斯时,我正在搜索贝勒斯下面的gif图像,但是当我将其作为子项添加到另一个回收站时,它添加了ABBONDANTE而不是贝勒斯。
这是我的适配器的ViewHolder
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);
Snackbar.make(v,variantiConstructors.get(position).getDeskT(),Snackbar.LENGTH_SHORT).show();
}
}
}
});
这是我来自Activity的onClickListener,我将项目添加到其他RecyclerView
adapterVarianti.setOnItemClickListener(new AdapterVarianti.OnItemClickListener() {
@Override
public void onItemClick(int position) {
search.clearFocus();
if (dummyDataItems.size() != 0) {
if (tipo.toString().equals("CON ") || tipo.toString().equals("PIU' ") || tipo.toString().equals("MENO ") || tipo.toString().equals("SENZA ")) {
// Here i'm adding the selected item to a String builder but i think it's here where i'm doing something wrong
tipo.append(filteredVariable.get(position).getDeskT());
// Adding item from the recyclerView where there is searchView to last item from the recyclerView on background.
ItemPTERM lastAdded = dummyDataItems.get(dummyDataItems.size() - 1);
lastAdded.setVariant(new Variant(tipo.toString()));
if (exampleAdapter.getItemCount() > 0) {
mRecyclerViewTOP.scrollToPosition(exampleAdapter.getItemCount() - 1);
}
exampleAdapter.notifyDataSetChanged();
tipo = new StringBuilder();
if(segmentedButtonGroup.getPosition() == 0){
tipo = new StringBuilder();
tipo.append("CON ");
}
if(segmentedButtonGroup.getPosition() == 1){
tipo = new StringBuilder();
tipo.append("PIU' ");
}
if(segmentedButtonGroup.getPosition() == 2){
tipo = new StringBuilder();
tipo.append("MENO ");
}
if(segmentedButtonGroup.getPosition() == 3){
tipo = new StringBuilder();
tipo.append("SENZA ");
}
}
}
}
});
这是我的带有过滤器的适配器代码
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 = variantiConstructors.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 constraint) {
final FilterResults oReturn = new FilterResults();
final ArrayList<VariantiConstructor> results = new ArrayList<>();
if (mFilteredList == null)
mFilteredList = new ArrayList<>(variantiConstructors);
if (constraint != null && constraint.length() > 0) {
if (mFilteredList != null && mFilteredList.size() > 0) {
for (final VariantiConstructor cd : mFilteredList) {
if (cd.getDeskT().toLowerCase()
.contains(constraint.toString().toLowerCase()))
results.add(cd);
}
}
oReturn.values = results;
oReturn.count = results.size(); //newly Aded by ZA
} else {
oReturn.values = mFilteredList;
oReturn.count = mFilteredList.size(); //newly added by ZA
}
return oReturn;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(final CharSequence constraint,
FilterResults results) {
variantiConstructors = new ArrayList<>((ArrayList<VariantiConstructor>) results.values);
// FIXME: 8/16/2017 implement Comparable with sort below
///Collections.sort(itemList);
notifyDataSetChanged();
}
};
}
@Override
public int getItemCount() {
return variantiConstructors.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);
Snackbar.make(v,variantiConstructors.get(position).getDeskT(),Snackbar.LENGTH_SHORT).show();
}
}
}
});
}
}
}
通过使用以下代码将列表再次传递给Activity来解决:
public ArrayList<VariantiConstructor> getList(){
return variantiConstructors;
}
并在活动代码中:
tipo.append(adapterVarianti.getList().get(position).getDeskT());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.