当我在搜索栏android中快速删除文本时,为什么我的recyclerview无法重置?

user14206421:

我在我的应用程序中具有搜索功能,尽管由于Firebase Firestore数据库查询而受到很大限制,但我设法使其能够查找与用户输入开头相匹配的字符串。

现在,即使我写了一个字符串“ starbucks”,而且我逐个字符地慢慢删除它,它也将我的recyclerView重置为可用的全部商店,而不仅仅是星巴克。

但是当我快速删除(按下键盘上的后退按钮)时,它在该特定商店停止并且没有刷新。

是什么原因造成的?

这是我的搜索适配器:

 public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchAdapterViewHolder> {

public Context c;
public ArrayList<Shop> arrayList;
public SearchAdapter(Context c,ArrayList<Shop> arrayList){
    this.c = c;
    this.arrayList = arrayList;
}

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

@Override
public long getItemId(int position){
    return position;
}

@NonNull
@Override
public SearchAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.shop_item,parent,false);
    return new SearchAdapterViewHolder(v);
}

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

    final Shop shop = arrayList.get(position);

    holder.list_name.setText(shop.getName());
    String removeBraces = shop.getLocation();
    String removeLeftBrace = removeBraces.replace("[","");
    String removeRightBrace = removeLeftBrace.replace("]","");
    holder.list_location.setText(removeRightBrace);
    holder.list_overallRating.setText(""+shop.getRatings());
    holder.setHeaderImage(shop.getShopHeaderImg());
    holder.list_profileImage(shop.getShopProfileImg());



    holder.cardLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Context context = v.getContext();
            Intent intent = new Intent(context, DetailsActivity.class);
            intent.putExtra("shopModel", shop);
            context.startActivity(intent);
        }
    });

}



public class SearchAdapterViewHolder extends RecyclerView.ViewHolder {
    private RelativeLayout cardLayout;
    private TextView list_name;
    private TextView list_location;
    private TextView list_overallRating;
    private ImageView header_img;
    private ImageView list_profileImage;

    public SearchAdapterViewHolder(@NonNull View itemView) {
        super(itemView);

        list_name = itemView.findViewById(R.id.list_name);
        list_location = itemView.findViewById(R.id.list_location);
        list_overallRating = itemView.findViewById(R.id.list_overallRating);
        header_img = itemView.findViewById(R.id.header_img);
        list_profileImage = itemView.findViewById(R.id.list_profileImage);
        cardLayout = itemView.findViewById(R.id.cardLayout);
    }
    public void setHeaderImage(final String Image) {
        final ImageView headerImg = (ImageView)itemView.findViewById(R.id.header_img);
        Picasso.get().load(Image).into(headerImg);

    }
    public void list_profileImage( final String image) {
        final ImageView profileImg = (ImageView)itemView.findViewById(R.id.list_profileImage);
        Picasso.get().load(image).into(profileImg);

    }
}

}

这是我的addTextChangeListener:

searchShops.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) {


        }

        @Override
        public void afterTextChanged(Editable s) {

            if(!s.toString().isEmpty()){
                searchInDB(s.toString().toLowerCase());
            }else{
               searchInDB("");
            }
        }
    });

这是我的searchInDB函数:

private void searchInDB(final String s) {

 

firebaseFirestore.collection("Shops").orderBy("searchName").startAt(s).endAt(s+"\uf8ff").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {

         @Override
         public void onComplete(@NonNull Task<QuerySnapshot> task) {
             if(task.isSuccessful()){
                 QuerySnapshot querySnapshot = task.getResult();
                 if(!querySnapshot.isEmpty()){
                     arrayList.clear();
                     for(QueryDocumentSnapshot DocumentSnapshot : querySnapshot) {
                         final Shop shop = DocumentSnapshot.toObject(Shop.class);
                         arrayList.add(shop);

                     }
                     SearchAdapter searchAdapter = new SearchAdapter(getApplicationContext(),arrayList);
                     recyclerView.setAdapter(searchAdapter);
                     searchAdapter.notifyDataSetChanged();

             }else{
                     arrayList.clear();


                }
             }else{

             }
         }


     });
狩猎:

更改:

if(!s.toString().isEmpty()){
                searchInDB(s.toString().toLowerCase());
            }else{
               searchInDB("");
            }

if(!s.toString().isEmpty()){
                searchInDB(s.toString().toLowerCase());
            }else{
               recyclerView.setAdapter(null);
            }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么AngularJS从搜索栏中删除我的部分URL

当我创建文本视图时,为什么在主要活动中无法识别它?

为什么当我添加 Bootstrap 时我的导航栏文本会变高?

当我点击文本框时,为什么工具栏没有显示?

当我仅在XS上显示导航栏文本时,为什么导航栏文本移至下一行?

每当我尝试选择文本时,为什么我的Android UI表现得很奇怪?

当我能够模拟 android 4.1 及更高版本时,为什么我无法模拟 android 2.3.3?

为什么我在Android中的RecyclerView无法正确显示视图?

当我使用Ajax请求时,为什么无法从我的快速服务器上下载JSON文件?

为什么当我想在工具栏的布局中访问TextView时将其变为null

当我尝试计算表中的行数时,为什么我的PHP无法正常工作?

为什么当我在地址栏中输入新搜索内容时,Chrome浏览器会更改tabId,然后将其导航到Google页面结果

为什么我的搜索栏及其功能无法显示/工作?

在 Elasticsearch 中使用“文本”类型时,为什么我无法搜索电子邮件域名

当我从单独的viewController中删除CoreData实体时,为什么要调用UITableView方法?

当我从EditText中删除所有内容时,为什么应用程序崩溃?

当我尝试在Git中删除文件夹时,为什么没有“ pathspec”?

当我在适配器中调用编辑项时,为什么我的 recyclerview 项会克隆?

为什么我的搜索栏在 Django 中不起作用?

当我尝试从 SQLite 数据库中删除一行时,为什么我的 android 应用程序崩溃?科特林

当我从chrome搜索上载文档时,为什么鹦鹉螺不在子目录中搜索?

为什么当我单击Burger div时我的侧边栏不显示

当我按下“tab”键时,为什么我的响应式导航栏被选中?

为什么我的搜索按钮在我的搜索栏下方

当我尝试从自定义数组中删除元素时,为什么Java会向我显示“越界”异常?

当我尝试从实体框架MVC更新记录时,为什么从数据库中删除了我的记录?

为什么当我尝试打印我正在搜索的文件的内容时出现错误?

当我尝试搜索时,为什么Chrome会将我发送到Google主页?

为什么我的网站可用于2 URL:当我使用http和https搜索时?