我想过滤GridView
,但问题似乎是我在View
内组织数据的方式。
这是我用于布局的代码
private GridView list;
private void loadListView(){
list = (GridView)findViewById(R.id.apps_list);
ArrayAdapter<AppDetail> adapter = new ArrayAdapter<AppDetail>(this, R.layout.list_item, apps) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = getLayoutInflater().inflate(R.layout.list_item, null);
}
ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon);
appIcon.setImageDrawable(apps.get(position).icon);
appIcon.setTag(apps.get(position).name);
TextView appLabel = (TextView)convertView.findViewById(R.id.item_app_label);
appLabel.setText(apps.get(position).label);
//TextView appName = (TextView)convertView.findViewById(R.id.item_app_name);
//appName.setText(apps.get(position).name);
return convertView;
}
};
list.setAdapter(adapter);
}
正如您可能已经理解的那样,我正在过滤设备上安装的应用列表。
现在我在同一个活动中定义了一个搜索方法。
private void doMySearch(String query){
}
这里我需要使用查询过滤适配器。当我尝试重新初始化arrayAdapter
并使用adapter.getFilter().filter(query);
对其进行过滤时
它不起作用。
根据apps.label
属性过滤适配器的方法是什么?
答案 0 :(得分:1)
这就是我解决问题的方法。 由于我的过滤器非常基本,我做了自己的循环和过滤,然后将所有这些传递给适配器。
private void doMySearch(final String query){
list = (GridView)findViewById(R.id.apps_list);
final List<AppDetail> apps_filtered = new ArrayList<>();
for(int q = 0; q < apps.size(); q++){
if(apps.get(q).label.toString().toLowerCase().startsWith(query)) {
Log.e("ddd", apps.get(q).label.toString().toLowerCase());
AppDetail app = new AppDetail();
app.label = apps.get(q).label;
app.name = apps.get(q).name;
app.icon = apps.get(q).icon;
apps_filtered.add(app);
}
}
ArrayAdapter<AppDetail> adapter = new ArrayAdapter<AppDetail>(this, R.layout.list_item, apps_filtered) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = getLayoutInflater().inflate(R.layout.list_item, null);
}
ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon);
appIcon.setImageDrawable(apps_filtered.get(position).icon);
appIcon.setTag(apps_filtered.get(position).name);
TextView appLabel = (TextView)convertView.findViewById(R.id.item_app_label);
appLabel.setText(apps_filtered.get(position).label);
//TextView appName = (TextView)convertView.findViewById(R.id.item_app_name);
//appName.setText(apps_filtered.get(position).name);
return convertView;
}
};
list.setAdapter(adapter);
}