Android 使用自定义适配器扩展baseadapter按标头筛选listview

Android 使用自定义适配器扩展baseadapter按标头筛选listview,android,listview,filter,Android,Listview,Filter,我的listview如下所示: --姓名(字符串)----货币(整数)----年(整数)---- 我想按姓名、金额或年份筛选此listview。 我可以在每个列上添加一个ImageView,如向上或向下的箭头,以调用onClickListener来进行listview筛选 请看下图: 根据图片,点击Img1=>FilterbyName,Img2=>FilterbyMoney 这里是适配器 public class Adapter extends BaseAdapter { private Ac

我的listview如下所示:

--姓名(字符串)----货币(整数)----年(整数)----

我想按姓名、金额或年份筛选此listview。 我可以在每个列上添加一个ImageView,如向上或向下的箭头,以调用onClickListener来进行listview筛选

请看下图: 根据图片,点击Img1=>FilterbyName,Img2=>FilterbyMoney

这里是适配器

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;
}
公共类适配器扩展了BaseAdapter{
私人活动;
私人充气机;
私人清单项目;
公共适配器(活动、列表项){
这个。活动=活动;
这个项目=项目;
}
@凌驾
public int getCount(){
返回items.size();
}
@凌驾
公共对象getItem(int位置){
返回项目。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
如果(充气器==null){
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
}
if(convertView==null){
convertView=充气机充气(右布局项目,空);
}
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=Items.get(位置);
name.setText(item.getName());
money.setText(item.getMoney());
year.setText(item.getYear());
返回视图;
}
}


感谢您的帮助

在您的
项目
类中,添加以下内部类(比较器):


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

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

如何将名称、货币和年份映射到listadapter中
getView()
中的listitems?底层数据结构(数据库、集合等)是什么?你能发布你的
getView()
方法吗?我编辑了post-Micha F。谢谢你的帮助,等等,你写了“filter”-我以为你的意思是如何对各个列进行排序,因为这些箭头通常是用来对各个列进行升序或降序排序的。我用我的帖子回答你的问题了吗?或者你的意思不一样?你好,Micha F.Excuz,谢谢你的延迟。让我们试着让你回来你好,米莎F。非常感谢。太神奇了。这工作很好。谢谢,干杯。如果我的答案解决了你的问题,你可以勾选它来表示,谢谢:)
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();
}