【发布时间】:2016-04-03 08:12:20
【问题描述】:
我已经实现了可过滤接口。 我的适配器的代码
public class LyricListAdapter extends BaseAdapter implements Filterable {
Context context;
List<Lyric> lyrics;
LyricsFilter filter;
public LyricListAdapter(Context context, List<Lyric> lyrics) {
this.context = context;
this.lyrics = lyrics;
getFilter();
}
@Override
public int getCount() {
return lyrics.size();
}
@Override
public Object getItem(int position) {
return lyrics.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//View holder
class ViewHolder {
ImageView imgThumb;
TextView lblTitle;
TextView lblArtist;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if(convertView == null) {
convertView = inflater.inflate(R.layout.row_lyric, null);
holder = new ViewHolder();
holder.imgThumb = (ImageView) convertView.findViewById(R.id.imgThumb);
holder.lblTitle = (TextView) convertView.findViewById(R.id.lblTitle);
holder.lblArtist = (TextView) convertView.findViewById(R.id.lblArtist);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
try {
Lyric lyric = (Lyric) getItem(position);
holder.imgThumb.setImageResource(lyric.getThumb());
holder.lblTitle.setText(lyric.getLyricTitle());
holder.lblArtist.setText(lyric.getLyricArtist());
} catch (Exception ex){
ex.printStackTrace();
}
return convertView;
}
@Override
public Filter getFilter() {
if(filter == null){
filter = new LyricsFilter();
}
return filter;
}
private class LyricsFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if(constraint == null || constraint.length() == 0){
results.values = lyrics;
results.count = lyrics.size();
} else {
ArrayList<Lyric> filteredLyrics = new ArrayList<Lyric>();
for(Lyric l : lyrics){
Log.d("!!!!!!!!!!!", l.getLyricTitle());
if(l.getLyricTitle().toLowerCase().contains(constraint.toString().toLowerCase()))
filteredLyrics.add(l);
}
results.values = filteredLyrics;
results.count = filteredLyrics.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
lyrics = (ArrayList<Lyric>) results.values;
notifyDataSetChanged();
}
}
}
- 问题是当我在编辑文本中键入一个字符时,列表得到 筛选。
- 当我输入下一个字符时,它会从过滤后的字符中过滤 结果不是原始列表。
- 即使我从编辑文本中删除文本,它也不会显示完整的歌词列表
过滤器是通过像这样的另一个活动调用的:
public void onTextChanged(CharSequence s, int start, int before, int count) {
Toast.makeText(LyricsListActivity.this, s, Toast.LENGTH_SHORT).show();
Log.d("12123123", s.toString());
adapter.getFilter().filter(s);
}
【问题讨论】:
-
看看here
标签: android android-listview android-adapter listadapter