使用自定义适配器扩展baseadapter按标头过滤listview

时间:2016-05-21 19:55:02

标签: android listview filter

我的列表视图如下所示:

- Name(String) - - Money(int)--- --- Years(int)----

我想按名称或按金钱或按年过滤此列表视图。 我可以在每个列上添加一个ImageView,如箭头向上或向下调用onClickListener来制作listview过滤器。

看看下面的图片: enter image description here 根据图片点击Img1 =>按名称过滤,Img2 =>按钱过滤......

这里是适配器

public class Adapter extends BaseAdapter {

private Activity activity;
private LayoutInflater inflater;
private List<Items> items;

public Adapter (Activity activity, List<Items> items){
    this.activity=activity;
    this.items =items;

}

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

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

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if(inflater==null){
        inflater=(LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    if(convertView==null){
        convertView=inflater.inflate(R.layout.items_row,null);
    }


        TextView name=(TextView)convertView.findViewById(R.id.acname);
        TextView money=(TextView)convertView.findViewById(R.id.ac_money);
        TextView year=(TextView)convertView.findViewById(R.id.ac_year);

    Items item=items.get(position);

        name.setText(item.getName());

        money.setText(item.getMoney());

        year.setText(item.getYear());

    return convertView;
}

}

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

Item班级中,添加以下内部类(比较器):

static class NameComparator implements Comparator<Item> {
    @Override
    public int compare(Item a, Item b) {
        return a.getName().compareTo(b.getName());
    }
}

static class MoneyComparator implements Comparator<Item> {
    @Override
    public int compare(Item a, Item b) {
        return a.getMoney().compareTo(b.getMoney);
    }
}

static class YearComparator implements Comparator<Item> {
    @Override
    public int compare(Item a, Item b) {
        return a.getYear().compareTo(b.getYear);
    }
}

在适配器中,您可以添加以下方法:

public void sortByName(boolean descending) {
    Collections.sort(items, new Item.NameComparator());
    if (descending) Collections.reverse(items);
    notifyDataSetChanged();
}

public void sortByMoney(boolean descending) {
    Collections.sort(items, new Item.MoneyComparator());
    if (descending) Collections.reverse(items);
    notifyDataSetChanged();
}

public void sortByYear(boolean descending) {
    Collections.sort(items, new Item.YearComparator());
    if (descending) Collections.reverse(items);
    notifyDataSetChanged();
}

现在,您可以使用箭头的onClick()方法调用这些方法。

答案 1 :(得分:0)

通过使用Collections.sort()方法,然后调用notifyDataSetChanged()。