Фильтрация ListView, расширяющая BaseAdapter

Я искал везде, но решение не работает.

Я пытаюсь отфильтровать адаптер «appsAdapter» с помощью метода:

appsAdapter.getFilter().filter();

Это применяется к ListView в MainActivity.

Это мой адаптер:

class AppsAdapter extends BaseAdapter implements Filterable{

private Context mContext;
private List<Pair<String, List<String>>> mAppsWithPermission;
private ArrayFilter mFilter;


AppsAdapter(Context context, List<Pair<String, List<String>>> appsWithPermission) {
    mContext = context;
    mAppsWithPermission = appsWithPermission;
}

static class ViewHolder {
    TextView appName;
}

@Override
public int getCount() {
    return mAppsWithPermission.size();
}

@Override
public Object getItem(int position) {
    return mAppsWithPermission.get(position);
}

@Override
public long getItemId(int position) {
    return mAppsWithPermission.get(position).hashCode();
}

@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;

    if (convertView == null) {
        convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
        holder = new ViewHolder();
        holder.appName = convertView.findViewById(R.id.list_item_appname);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    final Pair<String, List<String>> item = mAppsWithPermission.get(position);

    final PackageManager packageManager = mContext.getPackageManager();
    String name = null;
    try {
        name = (String) packageManager.getApplicationLabel(packageManager.getApplicationInfo(item.first, PackageManager.GET_META_DATA));
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }


public Filter getFilter() {
    // TODO Auto-generated method stub
    if (mFilter == null) {
        mFilter = new ArrayFilter();
    }
    return mFilter;
}
return convertView;
}

private class ArrayFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        //?
        return null;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        //?
    }

}
}

Я хочу отфильтровать имена.

Как я уже сказал, я перепробовал все, но, похоже, ничего не работает, поэтому, пожалуйста, не помечайте это как «дубликат».

Заранее спасибо за помощь,

С уважением,

Фаби

вроде ничего не работает? вы не реализовали никакой логики для performFiltering, как это будет работать.
ADM 26.03.2018 19:43

Кажется, ничего не работает, потому что я пробовал копировать из других вопросов и затем адаптироваться, но у меня никто не работал

faby GT 26.03.2018 19:51

Если вам нужно, я могу дать вам код, который не работает

faby GT 26.03.2018 20:15
0
3
20
0

Другие вопросы по теме