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;
}
}
}