Mohsen fallahi
Mohsen fallahi

Reputation: 917

sorting listview in android

i am using this code to sort my list view in alphabetic order but it doesn't sort it a-z it sorts it z-a where is The problem?

adapter.sort(new Comparator<String>() {
    @Override 
    public int compare(String arg1, String arg0) {
        return -arg1.compareTo(arg0);
    }
});

Upvotes: 3

Views: 12906

Answers (3)

Use Collections.sort(yourArrayList) and then reload yourArrayList into the adapter.

here is some code supports my answer

YourAdapter.java

public class YourAdapter extends BaseAdapter
{
    protected ArrayList<String> data;
    public void addSomeData()
    {
        data.add("oranj");
        data.add("apple");
        data.add("pineapple");
    }
    public YourAdapter sortData()
    {
        Collections.sort(data);
        return this;
    }
    public int getCount()
    {
        return data.size();
    }

    public String getItem(int position)
    {
        return data.get(position);
    }

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

and in your activity

list.setAdapter(new YourAdapter(this)); // not sorted list
list.setAdapter(new YourAdapter(this).sortData()); // sorted list

Upvotes: 2

Hariharan
Hariharan

Reputation: 24853

Remove the '-' between return and arg1.compareTo(arg0);. That will do the trick for you..

The following will sort in z-a(descending) order.

adapter.sort(new Comparator<String>() {
    @Override 
    public int compare(String arg1, String arg0) {
        return arg0.compareTo(arg1);
    }
});

For, a-z(ascending) :

adapter.sort(new Comparator<String>() {
        @Override 
        public int compare(String arg1, String arg0) {
            return arg1.compareTo(arg0);
        }
    });

Upvotes: 5

Damien R.
Damien R.

Reputation: 3373

Maybe the character '-' between return and arg1.compareTo(arg0); ?

Upvotes: 1

Related Questions