Android Studio сортирует значение из TextView в ListView - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь отсортировать свой ListView по дате из TextView.

На скриншотах вы можете видеть мой список дел, один TextView хранит срок выполнения. Я пытаюсь отсортировать ListView по датам, но я не знаю, как это сделать правильно.

enter image description here enter image description here

Вот код, который я смог найти в учебном пособии, но он не работает для меня.

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...