您好我是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);
}
}}
答案 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();
}