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

Comparatorを使用して、リストされたアイテムを並べ替えることができます。

次のようなことができます。

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 に答える