1

我想知道如何对这个适配器进行排序:

private class ProductsListAdapter extends BaseAdapter {

        public ProductsListAdapter() {
            super();

        }

        public int getCount() {
            return SingletonComparer.getInstance().getProducts().size();
        }

        public Object getItem(int position) {
            return SingletonComparer.getInstance().getProducts().get(position);
        }

        public long getItemId(int position) {
            return SingletonComparer.getInstance().getProducts().get(position).getId();
        }

        public View getView(int position, View convertView, ViewGroup parent) {
                TextView textView = getGenericView();
                textView.setText(SingletonComparer.getInstance().getProducts().get(position)
                        .getName());
                TextView textView2 = getGenericView();
                textView2.setText(""
                        + SingletonComparer.getInstance().getProducts()
                                .get(position).getPrice());
                TextView textView3 = getGenericView();


                textView3.setText(SingletonData.getInstance().getBrandName(SingletonComparer.getInstance().getProducts().get(position)
                        .getBrandID()));

                LinearLayout ll = new LinearLayout(getActivity());
                ll.addView(textView, new LinearLayout.LayoutParams(0,
                        LayoutParams.WRAP_CONTENT, 1.0f));
                ll.addView(textView2, 1, new LinearLayout.LayoutParams(0,
                        LayoutParams.WRAP_CONTENT, 1.0f));
                ll.addView(textView3, 2, new LinearLayout.LayoutParams(0,
                        LayoutParams.WRAP_CONTENT, 1.0f));
                ll.setId(SingletonComparer.getInstance().getProducts().get(position)
                        .getId());
                return ll;

        }
    }

按领域

SingletonComparer.getInstance().getProducts()
                                    .get(position).getPrice());

这个有可能?如果是,我该怎么做?

4

2 回答 2

10

您可以使用比较器对列出的项目进行排序。

你可以这样做:

public class SortByPrice implements Comparator{

    public int compare(Object o1, Object o2) {
        Product p1 = (Product) o1;
        Product p2 = (Product) o2; 
        // return -1, 0, 1 to determine less than, equal to or greater than
        return (p1.getPrice() > p2.getPrice() ? 1 : (p1.getPrice() == p2.getPrice() ? 0 : -1));
        // **or** the previous return statement can be simplified to:
        return p1.getPrice() - p2.getPrice();
    }
}

您不会希望在您的getView()方法中执行此操作,而是在将数据添加到适配器时通过对列表进行排序来执行此操作,因为它从一开始就按顺序排列。

因此,在将数据添加到列表之前,请致电:

Collections.sort(list, new SortByPrice());

它将使用您创建的Comparator对您的数据进行排序。

于 2012-11-23T11:08:39.403 回答
1

您不能对适配器进行排序。您应该对数据源进行排序(我希望在您的SingletonComparer课程中处理)

顺便说一句:你应该重构你的代码,将引用存储SingletonComparer在适配器的成员中,而不是不断地做SingletonComparer.getInstance().getProducts().

于 2012-11-23T11:07:01.780 回答