ImageView始终不出现在搜索界面的我的ListItems中,即使它不应该是Android

问题描述

我正在制作一个包含自定义ListView / GridView中的Folder列表的应用程序。在我的XML中,我有一个ImageView,认情况下它是INVISIBLE。在自定义ArrayAdapter类的getView方法中,我有一个根据数据库中的值打开或关闭ImageView的方法。可以在下面看到

@Override
    public View getView(int position,View convertView,ViewGroup parent){
        View listItemView = convertView;
        if(listItemView == null){
            listItemView = LayoutInflater.from(getContext()).inflate(R.layout.folder_view,parent,false);
        }

        //getting the checkBox view id
        CheckBox checkBox = (CheckBox) listItemView.findViewById(R.id.check_Box);

        checkBox.setVisibility(displayCheckBox ? View.VISIBLE : View.GONE);

        //getting the Image view id
        ImageView imageView = (ImageView) listItemView.findViewById(R.id.psw_lock);

        if(original_list.get(position).getLocked().equals("1")){
            imageView.setVisibility(View.VISIBLE);
        }else{
            imageView.setVisibility(View.INVISIBLE);
        }

但是,当我使用“搜索”界面搜索文件夹列表时,它工作得很好,直到只有1个结果为止,即使特定的项目应具有imageView,出现的列表项也会与imageView一起显示将可见性设置为“不可见”。因此,我迷失了要做的事情。

在这里可能会出现问题。 这是MainActivity中我的搜索界面工具栏实现

MenuInflater inflater = getMenuInflater();
        if(whichToolbar == 0){
            //inflate menu
            inflater.inflate(R.menu.menu_search,menu);
            MenuItem searchItem = menu.findItem(R.id.search);
            SearchView searchView = (SearchView) searchItem.getActionView();
            searchView.setQueryHint("Type here to Search");

            searchView.setonQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String s) {
                    return true;
                }

                @Override
                public boolean onQueryTextChange(String newText) {
                    setEmptyView(false);
                    itemAdapter.getFilter().filter(newText);
                    return true;
                }
            });
        }

这是我的自定义ArrayAdapter类中的Override Filter方法

@NonNull
    @Override
    public Filter getFilter() {
        Filter filter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {

                //new list which contains only filtered items
                ArrayList<WordFolder> filteredList = new ArrayList<>();
                //if input in the search bar is zero/nothing
                if(charSequence == null || charSequence.length() == 0){
                    //pour the entire list in
                    filteredList.addAll(original_list);
                }
                else{
                    //lowercase the string so case doesn't matter
                    String filterPattern = charSequence.toString().toLowerCase().trim();

                    //if it contains the word/letter then add it to the filtered list
                    int i = 0;
                    for(WordFolder item : original_list){
                        if(item.getTitle().toLowerCase().contains(filterPattern)){
                            filteredList.add(item);
                        }
                    }
                }

                //make a new variable and add all of the filtered words and return it
                FilterResults results = new FilterResults();
                results.values = filteredList;
                return results;
            }

            @Override

            protected void publishResults(CharSequence charSequence,FilterResults filterResults) {
                //clear the entire list and add it with all the filtered items
                new_list.clear();

                new_list.addAll((ArrayList<WordFolder>) filterResults.values);

                //notify the adapter that the list has changed.
                notifyDataSetChanged();

            }

        };

        return filter;
    }

如果需要,我可以显示更多代码

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)