[英]Android Expandable list search view
對子值進行排序。 當我鍵入搜索效果很好,但是當我刪除鍵入的字母時,列表不會更新。
我的模特班
public class Category {
public class SubCategory
{
public String name;
public SubCategory(String name)
{
this.name = name;
}
}
public String name;
public ArrayList<SubCategory> categories;
public Category(String name, ArrayList<SubCategory> categories)
{
this.name = name;
this.categories = categories;
}
}
適配器片段
private ArrayList<Category> data;
private ArrayList<Category> originalData;
public CategoryListAdapter(Context context, ArrayList<Category> data)
{
this.context = context;
this.data = data;
this.originalData = new ArrayList<>();
this.originalData.addAll(data); }
public Filter getFilter() {
MyFilter filter = new MyFilter();
return filter;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
String filterString = constraint.toString().toLowerCase();
Log.i("Tag" , filterString);
final ArrayList<Category> processData = originalData;
if(filterString.isEmpty()){
results.values = processData;
results.count = processData.size();
Log.i("Tag" , "original"+ originalData.get(0).categories.size());
}else {
int count = processData.size();
ArrayList<Category> nlist = new ArrayList<>();
for (int i = 0; i < count; i++) {
Category cat = processData.get(i);
final ArrayList<RequestCategory> req_catgories = processData.get(i).categories;
final ArrayList<RequestCategory> new_list = new ArrayList<>();
for (RequestCategory req_catgory : req_catgories) {
if (req_catgory.display_name.toLowerCase().contains(filterString)) {
new_list.add(req_catgory);
Log.i("Sub category", "added");
}
}
cat.categories = new_list;
nlist.add(cat);
}
results.values = nlist;
results.count = nlist.size();
}
Log.i("VALUES", results.values.toString());
return results;
}
問題出在哪里? 我認為我的原始列表在某處進行了修改? 有什么幫助嗎?
在performFiltering方法中進行以下更改:
更換
final ArrayList<Category> processData = originalData;
與
final ArrayList<Category> processData = new ArrayList<>();
processData.addAll(originalData);
當前,您的processData引用了originalData數組,並且當您修改processData數組時,您的originalData也被更改了。
請添加嘗試此進行一些更改..!
private ArrayList<Category> data;
private ArrayList<Category> searchData;
private ArrayList<Category> originalData;
public CategoryListAdapter(Context context, ArrayList<Category> data) {
this.context = context;
this.data = data;
this.searchData = data;
this.originalData = data;
}
public Filter getFilter() {
MyFilter filter = new MyFilter();
return filter;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
String filterString = constraint.toString().toLowerCase();
Log.i("Tag", filterString);
final ArrayList<Category> processData = searchData;
if (filterString.isEmpty()) {
results.values = processData;
results.count = processData.size();
Log.i("Tag", "original" + originalData.get(0).categories.size());
} else {
int count = processData.size();
ArrayList<Category> nlist = new ArrayList<>();
for (int i = 0; i < count; i++) {
Category cat = processData.get(i);
final ArrayList<RequestCategory> req_catgories = processData.get(i).categories;
final ArrayList<RequestCategory> new_list = new ArrayList<>();
for (RequestCategory req_catgory : req_catgories) {
if (req_catgory.display_name.toLowerCase().contains(filterString)) {
new_list.add(req_catgory);
Log.i("Sub category", "added");
}
}
cat.categories = new_list;
nlist.add(cat);
}
results.values = nlist;
results.count = nlist.size();
}
Log.i("VALUES", results.values.toString());
return results;
}
希望對您有幫助..!
將下面的代碼替換為“過濾器”中的部分代碼。
if(filterString==null||filterString.equals("")||filterString.length()==0){
new_list.addAll(req_catgories);
}else{
for (RequestCategory req_catgory : req_catgories) {
if (req_catgory.display_name.toLowerCase().contains(filterString)) {
new_list.add(req_catgory);
Log.i("Sub category", "added");
}
}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.