添加了可过滤的接口,但它只是刷新ListView但不过滤 listView项目
有许多解决方案可以解决此问题,但是我并没有确切地找到问题所在。我有一个自定义适配器,我想过滤其项目
ListAdapter.class
class ListAdapter extends ArrayAdapter<DataModel> implements View.OnClickListener, Filterable{
private ArrayList<DataModel> dataSet;
private ArrayList<DataModel> newDataset;
Context mContext;
public ListAdapter(ArrayList<DataModel> data, Context context) {
super(context, R.layout.model, data);
this.dataSet = data;
this.newDataset = data;
this.mContext = context;}
private static class ViewHolder {
TextView mt1;
TextView mt2;
TextView mt3;
TextView mt4;
ImageView mimg;
RelativeLayout layout;
}
@Override
public void onClick(View v) {
int position = (Integer) v.getTag();
Object object = getItem(position);
DataModel dataModel = (DataModel) object;
switch (v.getId()) {
case R.id.img:
Snackbar.make(v, "Release date " + dataModel.getId(), Snackbar.LENGTH_LONG)
.setAction("No action", null).show();
break;
}
}
private int lastPosition = -1;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
DataModel dataModel = getItem(position);
ViewHolder viewHolder;
final View result;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.model, parent, false);
viewHolder.mt1 = convertView.findViewById(R.id.name);
viewHolder.mt2 = (TextView) convertView.findViewById(R.id.price);
viewHolder.mt3 = (TextView) convertView.findViewById(R.id.incdec);
viewHolder.mt4 = (TextView) convertView.findViewById(R.id.dt);
viewHolder.mimg = (ImageView) convertView.findViewById(R.id.img);
viewHolder.layout = convertView.findViewById(R.id.layout);
result = convertView;
convertView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder) convertView.getTag();
result = convertView;
}
Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
result.startAnimation(animation);
lastPosition = position;
viewHolder.mt1.setText(dataModel.getName());
viewHolder.mt2.setText("$ : "+dataModel.getPrice());
viewHolder.mt3.setText("1H : "+dataModel.getPercent_change_1h());
DateFormat df = DateFormat.getDateTimeInstance();
viewHolder.mt4.setText(df.format(new Date(dataModel.getLast_updated()*1000))+" ago");
//viewHolder.mt4.setText(dataModel.getLast_updated()+" ago"); viewHolder.mimg.setImageDrawable(mContext.getResources().getDrawable(dataModel.getImage()));
viewHolder.mimg.setOnClickListener(this);
viewHolder.mimg.setTag(position);
return convertView;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
newDataset = (ArrayList<DataModel>) results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<DataModel> FilterArrList = new ArrayList<DataModel>();
if(dataSet==null)
{
dataSet = new ArrayList<DataModel>(newDataset);
}
if(constraint == null || constraint.length()==0)
{
results.count = dataSet.size();
results.values = dataSet;
}
else {
constraint = constraint.toString().toLowerCase();
for (int i=0; i<dataSet.size(); i++)
{
String data = dataSet.get(i).name;
if(data.toLowerCase().startsWith(constraint.toString()))
{
FilterArrList.add(new DataModel(dataSet.get(i).getId(),
dataSet.get(i).getImage(),
dataSet.get(i).getName(),
dataSet.get(i).getPrice(),
dataSet.get(i).getPercent_change_1h(),
dataSet.get(i).getLast_updated()));
}
}
results.count = FilterArrList.size();
results.values = FilterArrList;
}
return results;
}
};
return filter;
}
}
MainActivity.class 在我的活动中,我使用了此代码。
list.setTextFilterEnabled(true);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
(MainActivity.this).listAdapter.getFilter().filter(s);
}
@Override
public void afterTextChanged(Editable s) {
}
});
任何其他过滤ListView项的方法,我已经使用了一些stackoverflow解决方案,但在我的项目中无法使用