问题描述
我正在制作一个包含自定义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 (将#修改为@)