Android 如何按Notes对象的长参数对ListView排序
嗨,我是ArrayAdapters的新手,我需要根据我的Notes对象的长参数对我的ListView进行排序,我尝试了按DateModified对我的ListView进行排序,DateModified是长参数,但没有结果当我从菜单中按“排序”时,应该会执行该操作。 谁能帮我解决这个问题,我会很感激的 这是我活动的代码Android 如何按Notes对象的长参数对ListView排序,android,listview,sorting,Android,Listview,Sorting,嗨,我是ArrayAdapters的新手,我需要根据我的Notes对象的长参数对我的ListView进行排序,我尝试了按DateModified对我的ListView进行排序,DateModified是长参数,但没有结果当我从菜单中按“排序”时,应该会执行该操作。 谁能帮我解决这个问题,我会很感激的 这是我活动的代码 public class NoteListActivity extends Activity { private ListView listView; NotesAdapter
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);
}
}}
公共类NoteListActivity扩展活动{
私有列表视图列表视图;
注:适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u note\u list);
listView=(listView)findViewById(R.id.listView\u注释);
adapter=newNotesAdapter(NoteListActivity.this,generateNotList());
setAdapter(适配器);
}
私有OnItemClickListener onListItemClickListener=新建OnItemClickListener(){
私有ArrayList GenerateNotList(){
final ArrayList noteList=新ArrayList();
对于(int i=0;i<10;i++){
注释=新注释();
注:设置标题(“标题”+i);
note.setDateCreated(Calendar.getInstance().getTimeInMillis());
note.setDateModified(Calendar.getInstance().getTimeInMillis());
注释列表。添加(注释);
}
返回注释列表;
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuInflater MenuInflater=getMenuInflater();
菜单充气(右菜单注释列表菜单,菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
final int clickedItemId=item.getItemId();
开关(单击编辑EMID){
案例R.id.add:
返回true;
案例R.id.sort\u列表:
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}}
实施注释
类与可比
并将可比的代码放入
中,例如:
class Note implements Comparable<Note>{
..
...
@Override
public int compareTo(Note n) {
return this.modifiedDate-n.modifiedDate;
}
}
然后单击排序按钮的onClick
,只需调用:
adapter.sort();
如果要根据不同字段进行排序,只需为ex的每个字段实现比较器:
class DateCreatedComaparator implements Comparator<Note>{
public int compare(Note n1,Note n2){
return n1.dateCreated-n2.dateCreated;
}
}
当我写公共布尔比较器(注n)时,它会说…-标记上的语法错误,错误的构造-标记上的语法错误“只需写比较器(注n)请检查我编辑的ans在第一次将您的比较器函数更改为新函数时出错
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();
}