Я пытаюсь отсортировать свой ListView по дате из TextView.
На скриншотах вы можете видеть мой список дел, один TextView хранит срок выполнения. Я пытаюсь отсортировать ListView по датам, но я не знаю, как это сделать правильно.
Вот код, который я смог найти в учебном пособии, но он не работает для меня.
public class ToDoOverview extends AppCompatActivity {
ListView lv;
List<ToDo> dataSource;
ToDoOverviewListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_to_do_overview);
this.lv = (ListView) findViewById(R.id.listToDo);
this.dataSource = ToDoDatabaseHelper.getInstance(this).readAllToDos();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.menu_NewToDo:
createToDo();
return true;
case R.id.menu_dailyToDo:
showDailyToDo();
return true;
case R.id.menu_Sort_Fav:
sortFav();
return true;
case R.id.menu_Sort_Date:
sortDate();
return true;
case R.id.menu_Sort_Progress:
sortProg();
return true;
}
return super.onOptionsItemSelected(item);
}
public void sortDate(){
adapter.sort(new Comparator<ToDo>() {
@Override
public int compare(ToDo todo1, ToDo todo2) {
if(todo1.getDueDate() != null && todo2.getDueDate() != null){
long date = todo1.getDueDate().compareTo(todo2.getDueDate());
if(date != 0) {
refreshListView();
return (int) date;
} else if(todo1.getDueDate() != null){
refreshListView();
return -1;
} else if(todo2.getDueDate() != null){
refreshListView();
return 1;
}
return todo1.getName().compareToIgnoreCase(todo2.getName());
}
});
}
А вот мой класс ToDoOverviewListAdapter:
public class ToDoOverviewListAdapter extends ArrayAdapter<ToDo> {
public ToDoOverviewListAdapter(Context context, List<ToDo> objects) {
super(context, 0, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ToDo currentToDo = (ToDo) getItem(position);
View view = convertView;
if(view == null){
view = LayoutInflater.from(getContext()).inflate(R.layout.todo_overview_listitem, parent, false);
}
// First Step
((TextView) view.findViewById(R.id.tvName)).setText(currentToDo.getName());
TextView dueDate = (TextView) view.findViewById(R.id.tvDueDate);
ImageView fav = (ImageView) view.findViewById(R.id.favIcon);
TextView progStatus = (TextView) view.findViewById(R.id.progStatus);
if(currentToDo.getDueDate() == null){
dueDate.setVisibility(View.INVISIBLE);
} else {
dueDate.setVisibility(View.VISIBLE);
dueDate.setText(currentToDo.getDueDate());
}
if(currentToDo.isFavorite()){
fav.setVisibility(View.VISIBLE);
}else{
fav.setVisibility(View.INVISIBLE);
}
if(currentToDo.getProgress() == null){
progStatus.setVisibility(View.INVISIBLE);
} else {
progStatus.setVisibility(View.VISIBLE);
progStatus.setText(currentToDo.getProgress());
}
return view;
}
}