Java 可过滤阵列列表基适配器

Java 可过滤阵列列表基适配器,java,android,baseadapter,android-filterable,Java,Android,Baseadapter,Android Filterable,我正在尝试创建一个可筛选列表视图。列表视图的基本适配器不同于我发现的任何可过滤的适配器,我不知道如何修改它以使其能够被过滤。适配器: public class PingerAdapter extends BaseAdapter { private static final String TAG = "PingerAdapter"; private final ArrayList<Pinger> mPingers; private final LayoutInflater mLayo

我正在尝试创建一个可筛选列表视图。列表视图的基本适配器不同于我发现的任何可过滤的适配器,我不知道如何修改它以使其能够被过滤。适配器:

public class PingerAdapter extends BaseAdapter {

private static final String TAG = "PingerAdapter";
private final ArrayList<Pinger> mPingers;
private final LayoutInflater mLayoutInflater;
private final Context context;

public PingerAdapter(Context context) {
    this(context, new ArrayList<Pinger>());
}

public PingerAdapter(Context context, ArrayList<Pinger> pingers) {
    mPingers = pingers;
    this.context = context;
    mLayoutInflater = LayoutInflater.from(context);
}

/**
 * Add a pinger to the list.
 */
public void addPinger(Pinger pinger) {
    if (!mPingers.contains(pinger)) {
        mPingers.add(pinger);
        notifyDataSetChanged();
    }
}

public void addPinger(Collection<Pinger> pingers) {
    mPingers.addAll(pingers);

    // When setting the list of pingers, it may be due to a ping received from another pinger.
    // If there is a sending pinger, move that pinger to the top.
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    String sendingPingerToken = sharedPreferences.getString(PreferenceKeys.SENDING_PINGER_TOKEN, null);
    if (sendingPingerToken != null) {
        moveToTop(sendingPingerToken);
        // Remove sending pinger shared preference once pinger has been moved to top.
        sharedPreferences.edit().remove(PreferenceKeys.SENDING_PINGER_TOKEN).apply();
    }

    notifyDataSetChanged();
}

/**
 * Move a pinger to the top of the list.
 */
public void moveToTop(Pinger pinger) {
    mPingers.remove(pinger);
    mPingers.add(0, pinger);
    notifyDataSetChanged();
}

/**
 * Move a pinger identified by registration token to the top of the list.
 */
public void moveToTop(String pingerToken) {
    Pinger pinger = getPingerByToken(pingerToken);
    if (pinger != null) {
        moveToTop(pinger);
    }
}

/**
 * Return the pinger with matching registration token or null of no match is found.
 */
private Pinger getPingerByToken(String token) {
    for (Pinger pinger: mPingers) {
        if (pinger.getRegistrationToken().equals(token)) {
            return pinger;
        }
    }
    Log.e(TAG, "Pinger not found.");
    return null;
}

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

@Override
public Pinger getItem(int position) {
    return mPingers.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = initializeConvertView(parent);
    }

    final Pinger pinger = getItem(position);

    Glide.with(convertView.getContext()).load(pinger.getPictureUrl()).
            into((ImageView) convertView.getTag(R.id.profile_picture));

    ((TextView) convertView.getTag(R.id.name)).setText(pinger.getName());

    return convertView;
}

private View initializeConvertView(ViewGroup parent) {
    View convertView;
    final View view = mLayoutInflater.inflate(R.layout.pinger_item_view, parent, false);
    convertView = view;
    convertView.setTag(R.id.name, view.findViewById(R.id.name));
    final View tmpProfilePicture = view.findViewById(R.id.profile_picture);
    // OutlineProviders are available from API 21 onwards.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        tmpProfilePicture.setClipToOutline(true);
        tmpProfilePicture.setOutlineProvider(new PingerOutlineProvider());
    }
    convertView.setTag(R.id.profile_picture, tmpProfilePicture);
    return convertView;
}

public ArrayList<Pinger> getItems() {
    return mPingers;
}



}
当前无法解析getFilter()。谢谢你的帮助

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    // Get the list view and set it up.
    ListView listView = (ListView)     view.findViewById(com.yanay.yanay.apps.odds.R.id.ping_list);
    listView.setOnItemClickListener(mOnItemClickListener);
    listView.setEmptyView(view.findViewById(android.R.id.empty));
    if (listView.getAdapter() == null) {
        mPingerAdapter = new PingerAdapter(getActivity());
        listView.setAdapter(mPingerAdapter);

        inputSearch = (EditText) view.findViewById(R.id.inputSearch);
        inputSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                // When user changed the Text
                FriendlyPingFragment.this.mPingerAdapter.getFilter().filter(cs);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                          int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        });

        }