Android开发之ListView排序

下面是activity:

[java] view
plain
copy

  1. public class MainActivity extends Activity {
  2. private ListView mListView = null;
  3. private List<TestDate> mList = null;
  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. mListView = (ListView) this.findViewById(R.id.main_listView);
  9. mList = new ArrayList<TestDate>();
  10. initData();
  11. Collections.sort(mList, new Comparator<TestDate>() {
  12. /**
  13. *
  14. * @param lhs
  15. * @param rhs
  16. * @return an integer < 0 if lhs is less than rhs, 0 if they are
  17. *         equal, and > 0 if lhs is greater than rhs,比较数据大小时,这里比的是时间
  18. */
  19. @Override
  20. public int compare(TestDate lhs, TestDate rhs) {
  21. Date date1 = DateUtil.stringToDate(lhs.getDate());
  22. Date date2 = DateUtil.stringToDate(rhs.getDate());
  23. // 对日期字段进行升序,如果欲降序可采用after方法
  24. if (date1.before(date2)) {
  25. return 1;
  26. }
  27. return -1;
  28. }
  29. });
  30. mListView.setAdapter(new MyAdapter(this, mList));
  31. }
  32. private void initData() {
  33. mList.add(new TestDate("2012-12-12 12:30", "zhangsan"));
  34. mList.add(new TestDate("2012-12-12 10:20", "lisi"));
  35. mList.add(new TestDate("2012-12-11 10:21", "lisi"));
  36. mList.add(new TestDate("2012-12-11 10:20", "lisi"));
  37. mList.add(new TestDate("2012-12-13 01:03", "wangwu"));
  38. mList.add(new TestDate("2012-12-10 02:04", "zhaoliu"));
  39. mList.add(new TestDate("2012-12-15 23:00", "tianqi"));
  40. mList.add(new TestDate("2012-11-12 22:30", "wangwu"));
  41. mList.add(new TestDate("2012-12-17 08:24", "shimei"));
  42. mList.add(new TestDate("2012-11-10 11:10", "shisanmei"));
  43. mList.add(new TestDate("2012-12-18 16:50", "wangan"));
  44. mList.add(new TestDate("2012-12-19 18:00", "wangjiu"));
  45. mList.add(new TestDate("2012-12-20 19:30", "wusi"));
  46. mList.add(new TestDate("2012-12-20 19:30", "wusi"));
  47. }
  48. }

下面是工具类:

[java] view
plain
copy

  1. public class DateUtil {
  2. public static Date stringToDate(String dateString) {
  3. ParsePosition position = new ParsePosition(0);
  4. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  5. Date dateValue = simpleDateFormat.parse(dateString, position);
  6. return dateValue;
  7. }
  8. }

下面是ListView用的Adapter:

[java] view
plain
copy

  1. public class MyAdapter extends BaseAdapter {
  2. private Context mContext;
  3. private List<TestDate> mList;
  4. public MyAdapter(Context context, List<TestDate> list) {
  5. this.mContext = context;
  6. this.mList = list;
  7. }
  8. @Override
  9. public int getCount() {
  10. return mList != null ? mList.size() : 0;
  11. }
  12. @Override
  13. public Object getItem(int position) {
  14. return mList.get(position);
  15. }
  16. @Override
  17. public long getItemId(int position) {
  18. return position;
  19. }
  20. @Override
  21. public View getView(int position, View convertView, ViewGroup parent) {
  22. ViewHolder holder = null;
  23. if (convertView == null) {
  24. convertView = (LinearLayout) LayoutInflater.from(mContext).inflate(
  25. R.layout.main_item, null);
  26. holder = new ViewHolder();
  27. holder.textView1 = (TextView) convertView
  28. .findViewById(R.id.item_textView1);
  29. holder.textVeiw2 = (TextView) convertView
  30. .findViewById(R.id.item_textView2);
  31. convertView.setTag(holder);
  32. } else {
  33. holder = (ViewHolder) convertView.getTag();
  34. }
  35. holder.textView1.setText(mList.get(position).getDate());
  36. holder.textVeiw2.setText(mList.get(position).getName());
  37. return convertView;
  38. }
  39. private class ViewHolder {
  40. private TextView textView1;
  41. private TextView textVeiw2;
  42. }
  43. }

下面是xml文件:

[html] view
plain
copy

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" >
  5. <ListView
  6. android:id="@+id/main_listView"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent"
  9. android:layout_centerHorizontal="true"
  10. android:layout_centerVertical="true"
  11. tools:context=".MainActivity" />
  12. </RelativeLayout>

[html] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="horizontal" >
  6. <TextView
  7. android:id="@+id/item_textView1"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_gravity="center_vertical"
  11. android:layout_margin="10dp" />
  12. <TextView
  13. android:id="@+id/item_textView2"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:layout_gravity="center_vertical" />
  17. </LinearLayout>

下面是一个JavaBean的类:

[java] view
plain
copy

  1. public class TestDate {
  2. private String date;
  3. private String name;
  4. public String getDate() {
  5. return date;
  6. }
  7. public String getName() {
  8. return name;
  9. }
  10. public TestDate(String date, String name) {
  11. this.date = date;
  12. this.name = name;
  13. }
  14. }
时间: 2024-10-06 19:20:35

Android开发之ListView排序的相关文章

【转】Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 [原文链接] 这篇文章完美的解决了我几个月没结论的bug... 感谢热爱分享的技术达人~ 我是怎么走进这个大坑的..... 需求: 在listview中出一个EditText 接受用户输入消息. 前期解决方案: 给这个EditText绑定焦点事件.... 悲剧就开始了... 知道吗?当这个EditTextView被点了下,它的焦点就不断的获取,失去,获取,失去...  只点一下... 就频繁的重复..最后大部

Android开发之ListView添加多种布局效果演示

在这个案例中展示的新闻列表,使用到ListView控件,然后在适配器中添加多种布局效果,这里通过重写BaseAdapter类中的 getViewType()和getItemViewType()来做判断,指定ListView列表中指定位置的item加载对应的布局,在 getView中返回对应的视图,之前由于不清楚getViewTypeCount()和getItemViewType()方法,使用得比较少,一直以 为需要添加多个适配器,现在看来当时的想法说明自己见识还不够,哈哈. 第一步:创建放置Li

Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)

我们有时候会遇到这么一个情况.就是我在一个ListView里面需要显示的东西其实是有种类之分的.比如我要分冬天,夏天,秋天,春天,然后在这每个季节下面再去加载各自的条目数据.还有,比如我们的通讯录,我们需要按A,B,C这样的字母顺序分类然后显示.这个怎么实现呢? 下面我们不用ExpandableListView,而是只用ListView来实现这一显示效果. MainActivity.java [java] view plaincopy package com.xzq.listviewadapte

Android开发之ListView中的Button点击设置

在ListView的Item中,如果有Button控件,那么要实现Button和Item点击都有响应,可以将Item的Layout中Button的focusable属性设为false,然后设置layout的属性android:descendantFocusability="blocksDescendants". 代码如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLay

Android开发之ListView中Adapter的优化

ListView是Android开发最常用的控件,适配器adapter是将要显示的数据映射到View中并添加到ListView中显示 在实现ListView时,我们需要定义适配器如BaseAdapter.ArrayAdapter.CursorAdapter.SimpleAdapter等,并且重写其一下四个方法: 1 public int getCount(): 2 public Object getItem(int position) 3  public long getItemId(int p

Android开发之ListView条目批量选择删除

ListView实现的列表,假设是可编辑,可删除的,一般都要提供批量删除功能,否则的话,一项一项的删除体验非常不好,也给用户带来了非常大的麻烦. 实现效果图 详细实现代码 select.xml 主布局文件包括一个ListView另一个隐藏的布局,包括了两个Button一个TextView,默认布局为gone,当监听到长按响应事件时候显示. 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayou

Android开发之ListView中BaseAdapter的使用

BaseAdapter,官网链接--http://developer.android.com/intl/zh-cn/reference/android/widget/BaseAdapter.html 继承:Object 接口:ListAdapter  SpinnerAdapter 已知直接子类: ArrayAdapter<T>, CursorAdapter, SimpleAdapter 已知间接子类: ResourceCursorAdapter, SimpleCursorAdapter 使用B

Android开发之ListView利用OnScrollListener实现分页加载数据

上篇博文和大家分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了.通过分页分次加载数据,用户看多少就去加载多少. 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载.另一种是当用户滑动到底部时自动加载.今天我就和大家分享一下这个功能的实现.

android控件开发之ListView

android控件开发之ListView 本文主要讲述安卓开发中的ListView控件的使用方法 java代码: package com.example.listview; import java.util.ArrayList; import java.util.HashMap; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; import android.view.View