2

Can any one tell me how to sort or arrange the items of a listview in android? I've searched it for through Google, but i coudn't find any simple program to do that. Has any one have at-least one sample program to achieve this concept?

Suggestions please..

Thanks for your precious time!..

prabu
  • 717
  • 3
  • 12
  • 30

3 Answers3

4

Use comparator for sorting like

Collections.sort(data, new Comparator<YourDataModel>() {
    @Override
    public int compare(YourDataModel data1, YourDataModel data2) {
          if( data1.getDistance() < data2.getDistance() )
             return 1;
          else
             return 0;
    }
});

Where data is my array with the items inside.

For more refer the below link

https://stackoverflow.com/a/16353013/2143817

Community
  • 1
  • 1
Beginner
  • 1,414
  • 2
  • 21
  • 41
  • Note that this inverts the order from `lowest to highest`. Normally `compare` should: return `-1` when the first object is less than the second one. return `0` when the first object is equal to the second one return `1` when the first object is greater than the second one. See [here](http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html) for more details. – Jeroen Smit Apr 22 '14 at 06:48
0

Assuming you are using an array:

First define a list and adapter:

ArrayList<String> list;
ArrayAdapter<String> adapter;

Then:

 list = new ArrayList<String>(Arrays.asList(your_array_name));
        Collections.sort(list);

adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, list);
lv.setAdapter(adapter);

lv is your listview.Sort your array and bind it in your adapter.

kgandroid
  • 5,507
  • 5
  • 39
  • 69
0

Layout for sorting .

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/overlayLayout"
    android:background="#66000000"
    android:visibility="visible"
    >
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"

        android:background="@drawable/sorting_shape"
        android:layout_marginLeft="@dimen/_9sdp"
        android:layout_marginRight="@dimen/_9sdp"
        >
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="@dimen/_17sdp"
            android:background="@color/colorPrimary"
            android:text="SORT BY"
            android:gravity="center"
            android:textColor="@color/gen_white"
            android:id="@+id/textviewsortby"
            android:padding="@dimen/_9sdp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center"
        android:layout_below="@id/textviewsortby">


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Price - High to Low"
            android:id="@+id/highToLow"
            android:textSize="@dimen/_17sdp"
            android:gravity="center"
            android:textColor="@color/gen_black"
            android:padding="@dimen/_9sdp"/>
        <View android:layout_width="match_parent"
            android:layout_height="@dimen/view_width_small"
            android:background="@color/darkgray"
            android:layout_marginLeft="@dimen/_5sdp"
            android:layout_marginRight="@dimen/_5sdp"
            android:padding="@dimen/_9sdp"
            />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Price - Low to High"
            android:id="@+id/lowToHigh"
            android:textSize="@dimen/_17sdp"
            android:gravity="center"
            android:textColor="@color/gen_black"
            android:padding="@dimen/_9sdp"/>
    </LinearLayout>
    </RelativeLayout>
</RelativeLayout>

Activity code for sorting :

TextView sorting,filter;
RelativeLayout overlayLayout;
TextView highToLow, lowToHigh;

onCreate method :

 overlayLayout = (RelativeLayout) findViewById(R.id.overlayLayout);
    overlayLayout.setVisibility(View.GONE);
    highToLow = (TextView) findViewById(R.id.highToLow);
    lowToHigh = (TextView) findViewById(R.id.lowToHigh);
    sorting = (TextView) findViewById(R.id.sorting);

overlayLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            overlayLayout.setVisibility(View.GONE);
        }
    });


    sorting.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            overlayLayout.setVisibility(View.VISIBLE);

        }
    });
    highToLow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("hightolow", "hightolow");
            sortDescending();
            overlayLayout.setVisibility(View.GONE);
        }
    });
    lowToHigh.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("lowToHigh", "lowToHigh");
            sortAscending();
            overlayLayout.setVisibility(View.GONE);
        }
    });

Ascending and descending :

private void sortAscending() {
    Collections.sort(productList, new AscendingComparator());
    rcAdapter.notifyDataSetChanged();
    Log.d("hightolow", "sortAscending" + productList);
    /*for (ProductModel s : productList){
        Log.d("My array list content: ", s.getPrice()+"::"+s.getName());
    }*/
}

private void sortDescending() {
    Collections.sort(productList, new DescendingComparator());
    rcAdapter.notifyDataSetChanged();
    Log.d("hightolow", "productList" + productList);
    for (ProductModel s : productList) {
        Log.d("My array list content: ", s.getPrice() + "::" + s.getName());
    }
}


public class AscendingComparator implements Comparator<ProductModel> {
    @Override
    public int compare(ProductModel p1, ProductModel p2) {

        int pM1 = Math.round(Float.parseFloat(p1.getPrice()));
        int pM2 = Math.round(Float.parseFloat(p2.getPrice()));
        if(pM1 > pM2){
            return 1;
        }else if((pM1 < pM2)){
            return -1;
        }else{
            return 0;
        }
    }
}

public class DescendingComparator implements Comparator<ProductModel> {
    @Override
    public int compare(ProductModel p1, ProductModel p2) {
        //Log.d("hightolow","productList"+p2.getPrice().compareTo(p1.getPrice()));
        //  Log.d("hightolow","productList:"+p1.getPrice());
        //    Log.d("hightolow","productList::"+p2.getPrice());
        int pM1 = Math.round(Float.parseFloat(p1.getPrice()));
        int pM2 = Math.round(Float.parseFloat(p2.getPrice()));
        if(pM2 > pM1){
            return 1;
        }else if((pM2 < pM1)){
            return -1;
        }else{
            return 0;
        }
    }
}
Hanisha
  • 849
  • 10
  • 8