Android SearchView和Recyclerview,显示正确的卡,但同时其他卡将被永久删除

Android SearchView和Recyclerview,显示正确的卡,但同时其他卡将被永久删除,android,android-recyclerview,searchview,android-cardview,Android,Android Recyclerview,Searchview,Android Cardview,我正在尝试实现searchview。它在某种程度上起作用,但问题是,在你开始打字后,它是单向的。你得到了信息,但是如果你删除了文本,你将不会得到最初的结果。我在和CardView合作。 Marker是一个模型(gettitle等) 我的适配器: public class AdapterRestavracije extends RecyclerView.Adapter<AdapterRestavracije.ViewHolderRestavraci

我正在尝试实现searchview。它在某种程度上起作用,但问题是,在你开始打字后,它是单向的。你得到了信息,但是如果你删除了文本,你将不会得到最初的结果。我在和CardView合作。 Marker是一个模型(gettitle等)

我的适配器:

public class AdapterRestavracije extends                      
RecyclerView.Adapter<AdapterRestavracije.ViewHolderRestavracije> {
ArrayList<Marker> arrayList;

private LayoutInflater layoutInflater;
private VolleySingleton mVolleySingleton;
Context context;

public AdapterRestavracije(Context context, ArrayList<Marker> models) {
    layoutInflater = LayoutInflater.from(context);
    this.context = context;
    mVolleySingleton = VolleySingleton.getsIstance();
    arrayList = new ArrayList<Marker>(models);
   // this.arrayList = new ArrayList<Marker>();
}



public void setRestaurants(ArrayList<Marker> arrayList) {
    this.arrayList = arrayList;
    notifyItemChanged(0, arrayList.size());
}


@Override
public ViewHolderRestavracije onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = layoutInflater.inflate(R.layout.restaurants_rview, parent, false);
    ViewHolderRestavracije viewHolder = new ViewHolderRestavracije(view);


    return viewHolder;
}

@Override
public void onBindViewHolder(ViewHolderRestavracije holder, int position) {

    Marker currentRest = arrayList.get(position);
    holder.name.setText(currentRest.getTitle());
    holder.address.setText(currentRest.getAddress());
    holder.placilo.setText(currentRest.getValue_of_charge() + " €");
    holder.oddaljenost.setText(currentRest.getOddaljenost());
    holder.idrestavracije.setText(currentRest.getId());
    try {
        holder.ratingBarOverall.setRating(Float.parseFloat(currentRest.getOverallRating()));
    } catch (Exception e) {
        holder.ratingBarOverall.setRating(0);
    }

    Log.d("RESTAVRACIJEEEEE", currentRest.getTitle());

}

@Override
public int getItemCount() {
    return arrayList.size();
}

class ViewHolderRestavracije extends RecyclerView.ViewHolder {
    private TextView name, oddaljenost, address, textPlacilo, placilo, idrestavracije;
    private RatingBar ratingBarOverall;
    private int id;
    public View view;

    public ViewHolderRestavracije(View itemView) {
        super(itemView);
        view = itemView;


        name = (TextView) itemView.findViewById(R.id.tvNameRestaurant);
        oddaljenost = (TextView) itemView.findViewById(R.id.tvOddaljenost);
        address = (TextView) itemView.findViewById(R.id.tvAddress);
        textPlacilo = (TextView) itemView.findViewById(R.id.tvDoplacilo);
        placilo = (TextView) itemView.findViewById(R.id.tvDoplaciloEvri);
        idrestavracije = (TextView) itemView.findViewById(R.id.idrestavracije);


        ratingBarOverall = (RatingBar) itemView.findViewById(R.id.ratingOverallRestavracije);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //id = getAdapterPosition();

                //Log.d("CLICKED", idrestavracije.getText().toString() + "");
                //Log.d("CLICKED", name.getText().toString() + "");

                String idrest = idrestavracije.getText().toString();

                //   Log.d("CLICKED", intid + "");

                //   Intent i = new Intent(context, RestaurantActivity.class);
                //  i.putExtra("ID_rest", intid);
                //    context.startActivity(i);

                Intent i = new Intent(context, RestaurantActivity.class);
                Bundle bundle = new Bundle();

                bundle.putString("ID_rest", idrest);

                i.putExtras(bundle);

                context.startActivity(i);

            }
        });
    }

}

////PRIPRAVA ZA SEARCH//////

public void animateTo(ArrayList<Marker> models) {
    applyAndAnimateRemovals(models);
    applyAndAnimateAdditions(models);
    applyAndAnimateMovedItems(models);
}
private void applyAndAnimateRemovals(ArrayList<Marker> newModels) {
    for (int i = arrayList.size() - 1; i >= 0; i--) {
        final Marker model = arrayList.get(i);
        if (!newModels.contains(model)) {
            removeItem(i);
        }
    }
}
private void applyAndAnimateAdditions(ArrayList<Marker> newModels) {
    for (int i = 0, count = newModels.size(); i < count; i++) {
        final Marker model = newModels.get(i);
        if (!arrayList.contains(model)) {
            addItem(i, model);
        }
    }
}

private void applyAndAnimateMovedItems(ArrayList<Marker> newModels) {
    for (int toPosition = newModels.size() - 1; toPosition >= 0; toPosition--) {
        final Marker model = newModels.get(toPosition);
        final int fromPosition = arrayList.indexOf(model);
        if (fromPosition >= 0 && fromPosition != toPosition) {
            moveItem(fromPosition, toPosition);
        }
    }
}

public Marker removeItem(int position) {
    final Marker model = arrayList.remove(position);
    notifyItemRemoved(position);
    return model;
}

public void addItem(int position, Marker model) {
    arrayList.add(position, model);
    notifyItemInserted(position);
}

public void moveItem(int fromPosition, int toPosition) {
    final Marker model = arrayList.remove(fromPosition);
    arrayList.add(toPosition, model);
    notifyItemMoved(fromPosition, toPosition);
}

////PRIPRAVA ZA SEARCH//////
公共类AdapterRestavracije扩展
RecyclerView.适配器{
ArrayList ArrayList;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
私人排球单打;
语境;
公共适配器restavracije(上下文、数组列表模型){
layoutInflater=layoutInflater.from(上下文);
this.context=上下文;
mVolleySingleton=VolleySingleton.getResistance();
arrayList=新的arrayList(型号);
//this.arrayList=新的arrayList();
}
公共餐厅(ArrayList ArrayList){
this.arrayList=arrayList;
notifyItemChanged(0,arrayList.size());
}
@凌驾
public ViewHolderRestavracije onCreateViewHolder(视图组父级,int-viewType){
视图=布局更平坦。充气(R.layout.restaurants\u rview,parent,false);
ViewHolderRestavracije viewHolder=新ViewHolderRestavracije(视图);
返回视图持有者;
}
@凌驾
BindViewHolder上的公共无效(ViewHolderRestavracije holder,内部位置){
Marker currentRest=arrayList.get(位置);
holder.name.setText(currentRest.getTitle());
holder.address.setText(currentRest.getAddress());
holder.placilo.setText(currentRest.getValue of_charge()+“€”);
holder.oddaljenost.setText(currentRest.getOddaljenost());
holder.idrestavracije.setText(currentRest.getId());
试一试{
holder.ratingBarOverall.setRating(Float.parseFloat(currentRest.getOverallRating());
}捕获(例外e){
保持架额定气压总设置(0);
}
d(“restavracijeeee”,currentRest.getTitle());
}
@凌驾
public int getItemCount(){
返回arrayList.size();
}
类ViewHolderRestavracije扩展了RecyclerView.ViewHolder{
私有TextView名称、oddaljenost、地址、textPlacilo、placilo、idrestavracije;
私人评级Bar评级Barorall;
私有int-id;
公众观点;
public ViewHolderRestavracije(查看项目视图){
超级(项目视图);
视图=项目视图;
name=(TextView)itemView.findViewById(R.id.tvNameRestaurant);
oddaljenost=(TextView)itemView.findViewById(R.id.tvOddaljenost);
地址=(TextView)itemView.findViewById(R.id.tvAddress);
textPlacilo=(TextView)itemView.findViewById(R.id.tvDoplacilo);
placilo=(TextView)itemView.findViewById(R.id.tvdoplaciloievri);
idrestavracije=(TextView)itemView.findViewById(R.id.idrestavracije);
ratingBarOverall=(RatingBar)itemView.findViewById(R.id.ratingOverallRestavracije);
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
//id=getAdapterPosition();
//Log.d(“单击”,idrestavracije.getText().toString()+”);
//Log.d(“单击”,name.getText().toString()+”);
字符串idrest=idrestavracije.getText().toString();
//Log.d(“单击”,intid+);
//意向i=新意向(上下文、RestaurantActivity.class);
//i.putExtra(“ID_rest”,intid);
//背景。起始触觉(i);
意向i=新意向(上下文、RestaurantActivity.class);
Bundle=新Bundle();
bundle.putString(“ID_rest”,idrest);
i、 putExtras(束);
背景。起始触觉(i);
}
});
}
}
////PRIPRAVA ZA搜索//////
public void animateTo(ArrayList模型){
应用数据删除(模型);
应用程序添加(模型);
应用数据移动数据项(模型);
}
私有无效应用程序数据删除(ArrayList新模型){
对于(int i=arrayList.size()-1;i>=0;i--){
最终标记模型=arrayList.get(i);
如果(!newModels.contains(model)){
删除项目(i);
}
}
}
私有无效应用程序添加(ArrayList新模型){
for(int i=0,count=newModels.size();i=0;toPosition--){
最终标记模型=newModels.get(拓扑位置);
final int fromPosition=arrayList.indexOf(model);
if(fromPosition>=0&&fromPosition!=TopoPosition){
移动项目(从位置、位置);
}
}
}
公共标记移除项目(内部位置){
最终标记模型=arrayList.remove(位置);
已移除(位置)的项目;
收益模型;
}
公共无效附加项(整型位置,标记模型){
添加(位置、型号);
(位置);
}
公共无效移动项(int-fromPosition、int-toPosition){
最终标记模型=arrayList.remove(fromPosition);
添加(地形、模型);
已移动的项目(从位置、位置);
}
////PRIPRAVA ZA搜索//////
}

我的片段:

---OTHER CODE----
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
    super.onViewCreated(view, savedInstanceState);
    setHasOptionsMenu(true);

    recyclerView = (RecyclerView) view.findViewById(R.id.listRestaurants);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    // recyclerView.setItemAnimator(new DefaultItemAnimator());

    listRestaurants = new ArrayList<Marker>();

    jsonRequest(latitude, longitude);

    adapterRestavracije = new AdapterRestavracije(getActivity(),listRestaurants);
    recyclerView.setAdapter(adapterRestavracije);

}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.main_menu2, menu);
    MenuItem item = menu.findItem(R.id.action_search);
    final SearchView sv = (SearchView) MenuItemCompat.getActionView(item);
    sv.setOnQueryTextListener(this);
    super.onCreateOptionsMenu(menu, inflater);
}


@Override
public boolean onQueryTextSubmit(String query) {
   // Utils.LogDebug("Submitted: "+query);
    Log.d("Clicked: ", query);

    return false;
}

@Override
public boolean onQueryTextChange(String query) {
  //  Utils.LogDebug("Changed: " + newText);
    final ArrayList<Marker> filteredModelList = filter(listRestaurants, query);
    adapterRestavracije.animateTo(filteredModelList);
    recyclerView.scrollToPosition(0);
    //Log.d("Query Changed: ", query);
    return false;
}

private ArrayList<Marker> filter(ArrayList<Marker> listRestaurants, String query) {
    query = query.toLowerCase();

    final ArrayList<Marker> filteredModelList = new ArrayList<Marker>();
    for (Marker model : listRestaurants) {
        final String text = model.getTitle().toLowerCase();
        if (text.contains(query)) {
            filteredModelList.add(model);
        }
    }
    return filteredModelList;
}

---OTHER CODE----
——其他代码----
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
设置选项菜单(真);
recyclerView=(recyclerView)view.findViewById(R.id.listRestaurants);
setLayoutManager(新的LinearLayoutManager(getActivity());
//setItemAnimator(新的DefaultItemAnimator());
listRestaurants=新的ArrayList();
jsonRequest(纬度、经度);
adapterRestavracije=新adapterRestavracije(getActivity(),listRestaurants);
毛茸茸
List<ExampleModel> mModels;
private final List<ExampleModel> mModels;