如何通过我的Note对象的Long参数对ListView进行排序

时间:2014-01-07 18:59:10

标签: android listview sorting

您好我是ArrayAdapters的新手,我需要通过我的Note对象的Long参数对ListView进行排序,我试图按类别排序我的listView by DateModified这是Long参数但没有结果...... 当我从菜单中按排序时,应该执行操作。

有人可以帮我解决这个问题,我会感激不尽的!

这是我活动的代码

public class NoteListActivity extends Activity {

private ListView listView;
NotesAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_note_list);
    listView = (ListView) findViewById(R.id.listView_notes);

    adapter = new NotesAdapter(NoteListActivity.this, generateNoteList());
    listView.setAdapter(adapter);

}
private OnItemClickListener onListItemClickListener = new OnItemClickListener() {


private ArrayList<Note> generateNoteList() {
    final ArrayList<Note> noteList = new ArrayList<Note>();
    for (int i = 0; i < 10; i++) {
        Note note = new Note();
        note.setTitle("Title" + i);
        note.setDateCreated(Calendar.getInstance().getTimeInMillis());
        note.setDateModified(Calendar.getInstance().getTimeInMillis());
        noteList.add(note);
    }
    return noteList;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.note_list_menu, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    final int clickedItemId = item.getItemId();
    switch (clickedItemId) {
        case R.id.add:
            return true;

        case R.id.sort_list:
            return true;
        default:
            return super.onOptionsItemSelected(item);

    }
}}

1 个答案:

答案 0 :(得分:1)

使用Note实施Comparable课程,并将compareTo的代码放在前面:

class Note implements Comparable<Note>{
..
...

    @Override
    public int compareTo(Note n) {  
      return this.modifiedDate-n.modifiedDate;
    }

}

Adapter中创建一个功能以对项目进行排序:

public void sort(){
Colllections.sort(noteList);
notifyDataSetChanged();
}

排序按钮的onClick只需调用:

adapter.sort();

如果要根据不同的字段进行排序,只需为每个字段实现比较器,例如:

class DateCreatedComaparator implements Comparator<Note>{
    public int compare(Note n1,Note n2){
       return n1.dateCreated-n2.dateCreated; 
    }
} 

并在您的排序功能中:

public void sort(){
   Colllections.sort(noteList,new DateCreatedComaparator());
   notifyDataSetChanged();
}