Project Structure for Sorting List of Data :
sort_list.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<Button
android:id="@+id/desc_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="48dp"
android:layout_toRightOf="@+id/asc_button"
android:text="DESC" />
<ListView
android:id="@+id/name_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/desc_button" >
</ListView>
<Button
android:id="@+id/asc_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/name_list"
android:layout_marginLeft="54dp"
android:text="ASC" />
</RelativeLayout>
sort_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/name_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
MainActivity.java
package com.example.sorting_listview_data_asc_desc_example;public class MainActivity extends Activity implements OnClickListener {
private Button mAscButton;
private Button mDescButton;
private ListView mNameListView;
private List<String> stringList;
private StringAdapter stringAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sort_list);
mAscButton = (Button) findViewById(R.id.asc_button);
mDescButton = (Button) findViewById(R.id.desc_button);
mNameListView = (ListView) findViewById(R.id.name_list);
stringList = new ArrayList<String>();
stringList.add("Rajesh");
stringList.add("Ramanan");
stringList.add("Kannan");
stringList.add("Mahesh");
stringList.add("Moses");
stringList.add("Kuberan");
stringAdapter = new StringAdapter(MainActivity.this, R.layout.sort_list_item, stringList);
mNameListView.setAdapter(stringAdapter);
mAscButton.setOnClickListener(this);
mDescButton.setOnClickListener(this);
}
// Comparator for Ascending Order
public static Comparator<String> StringAscComparator = new Comparator<String>() {
public int compare(String app1, String app2) {
String stringName1 = app1;
String stringName2 = app2;
return stringName1.compareToIgnoreCase(stringName2);
}
};
//Comparator for Descending Order
public static Comparator<String> StringDescComparator = new Comparator<String>() {
public int compare(String app1, String app2) {
String stringName1 = app1;
String stringName2 = app2;
return stringName2.compareToIgnoreCase(stringName1);
}
};
// Your Own Custom Adapter
private class StringAdapter extends ArrayAdapter<String> {
// Attributes
private List<String> strModel;
public StringAdapter(Context context, int textViewResourceId,
List<String> strModel) {
super(context, textViewResourceId, strModel);
this.strModel = strModel;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
Holder holder = null;
if (view == null) {
view = View.inflate(MainActivity.this,
R.layout.sort_list_item, null);
holder = new Holder();
holder.StringNameTextView = (TextView) view
.findViewById(R.id.name_text_view);
view.setTag(holder);
} else {
holder = (Holder) view.getTag();
}
String nameText=strModel.get(position);
holder.StringNameTextView.setText(nameText);
return view;
}
}
static class Holder
{
private TextView StringNameTextView;
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.asc_button :
Collections.sort(stringList, StringAscComparator);
Toast.makeText(MainActivity.this, "Sorting in Ascending Order", Toast.LENGTH_LONG).show();
break;
case R.id.desc_button :
Collections.sort(stringList, StringDescComparator);
Toast.makeText(MainActivity.this, "Sorting in Descending Order", Toast.LENGTH_LONG).show();
break;
}
stringAdapter.notifyDataSetChanged();
}
}
Output :
Source Code : Download this Example Here
Thanks, your post has been very useful...
ReplyDelete