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
}
});
}