Android 2 sprawy - sort, datepicker

0

Witam! Mam 2 pytania w sprawie androida. Są to wprawdzie 2 różne sprawy, ale mimo to nie widzę sensu zakładnia dwóch tematów, więc postaram się zmieścić wszystko w jednym.

1.Jak zmienić wygląd/kolor zaznaczonej na screenie ascreen.jpg części datepickera?

1f93e350fc.png ascreen.jpg

2.Sortowanie ArrayList: Przy wyborze sortowania po dacie zakończenia/dodania, statusie i priorytecie działa poprawnie - sort_dd.jpg natomiast przy sortowaniu po nazwie dzieje się coś takiego, jak na screenie sort_n.jpg. Dlaczego?

96feaa575f.png sort_def.jpg Domyslny widok listy

0a8395f12f.png sort_dd.jpg Sortowanie po dacie dodania

bac31c61d7.png sort_n.jpg Sortowanie po nazwie

MainActivity.java

private void Sort(String param){


        Toast t2 =  Toast.makeText(MainActivity.this,"You selected : "+ param, Toast.LENGTH_LONG);
        t2.show();
        String t;

        items2.clear();




        switch(param) {

            case "Nazwa":
                Collections.sort(events, Zdarzenie.SortNazwa);
                break;

            case "Data dodania":
                Collections.sort(events, Zdarzenie.SortDataDod);
                break;

            case "Data zakończenia":
                Collections.sort(events, Zdarzenie.SortData);
                break;

            case "Priorytet":
                Collections.sort(events, Zdarzenie.SortPriorytet);
                break;
            case "Status":
                Collections.sort(events, Zdarzenie.SortStatus);
                break;

        }
        for (int i = 1; i < events.size(); i++) {
            Zdarzenie z = events.get(i);

              if(param.equalsIgnoreCase("Nazwa")){
                  t = z.getNazwa() + " " + z.getGodzina() + " " + z.getData();
                  items2.add(t);
              }
             if(param.equalsIgnoreCase("Data dodania")){
                 t = z.getData_dodania() + " " + z.getGodzina_dodania() + " " + z.getNazwa();
                 items2.add(t);
             }
            if(param.equalsIgnoreCase("Data zakończenia")){
                t = z.getData() + " " + z.getGodzina() + " " + z.getNazwa();
                items2.add(t);
            }
            if(param.equalsIgnoreCase("Priorytet")){
                t = z.getPriorytet() + " " + z.getNazwa();
                items2.add(t);
            }
            if(param.equalsIgnoreCase("Status")){
                if (z.isAktywny() == true) {
                    t = "Aktywny" + " " + z.getNazwa();
                    items2.add(t);
                }
                if (z.isAktywny() == false) {
                    t = "Nieaktywny" + " " + z.getNazwa();
                    items2.add(t);
                }

            }

        }
            itemsAdapter2 = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, items2);
            lvItems.setAdapter(itemsAdapter2);

    }

Zdarzenie.java

package com.example.administrator.myapplication;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Comparator;


public class Zdarzenie implements Serializable {

    public static Object Zdarzenie;


    private String nazwa;
    private String data;
    private String godzina;
    private String data_dodania;
    private String godzina_dodania;
    private boolean aktywny;
    private String priorytet;

    public String getNazwa() {
        return nazwa;
    }

    public void setNazwa(String nazwa) {
        this.nazwa = nazwa;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getGodzina() {
        return godzina;
    }

    public void setGodzina(String godzina) {
        this.godzina = godzina;
    }

    public String getData_dodania() {
        return data_dodania;
    }

    public void setData_dodania(String data_dodania) {
        this.data_dodania = data_dodania;
    }

    public String getGodzina_dodania() {
        return godzina_dodania;
    }

    public void setGodzina_dodania(String godzina_dodania) {
        this.godzina_dodania = godzina_dodania;
    }

    public boolean isAktywny() {
        return aktywny;
    }

    public void setAktywny(boolean aktywny) {
        this.aktywny = aktywny;
    }

    public String getPriorytet() {
        return priorytet;
    }

    public void setPriorytet(String priorytet) {
        this.priorytet = priorytet;
    }
    /*załącznik*/

    public static Comparator<Zdarzenie> SortNazwa = new Comparator<Zdarzenie>() {

        public int compare(Zdarzenie z1, Zdarzenie z2) {
            String Nazwa1 = z1.getNazwa().toLowerCase();
            String Nazwa2 = z2.getNazwa().toLowerCase();

            //ascending order
            return Nazwa1.compareTo(Nazwa2);

            //descending order
            //return StudentName2.compareTo(StudentName1);
        }};

    public static Comparator<Zdarzenie> SortPriorytet = new Comparator<Zdarzenie>() {

        public int compare(Zdarzenie z1, Zdarzenie z2) {
            String Priorytet1 = z1.getPriorytet().toUpperCase();
            String Priorytet2 = z2.getPriorytet().toUpperCase();

            //ascending order
            return Priorytet2.compareTo(Priorytet1);

            //descending order
            //return StudentName2.compareTo(StudentName1);
        }};

    public static Comparator<Zdarzenie> SortData = new Comparator<Zdarzenie>() {

        public int compare(Zdarzenie z1, Zdarzenie z2) {
            String data1 = z1.getData();
            String data2 = z2.getData();

            String godzina1 = z1.getGodzina();
            String godzina2 = z2.getGodzina();

            String czas1 = data1 + " " + godzina1;
            String czas2 = data2 + " " + godzina2;


            //ascending order
            return czas2.compareTo(czas1);

            //descending order
            //return StudentName2.compareTo(StudentName1);
        }};


    public static Comparator<Zdarzenie> SortStatus = new Comparator<Zdarzenie>() {

        public int compare(Zdarzenie z1, Zdarzenie z2) {
            Boolean Status1 = z1.isAktywny();
            Boolean Status2 = z2.isAktywny();

            //ascending order
            return Status2.compareTo(Status1);

            //descending order
            //return StudentName2.compareTo(StudentName1);
        }};

    public static Comparator<Zdarzenie> SortDataDod = new Comparator<Zdarzenie>() {

        public int compare(Zdarzenie z1, Zdarzenie z2) {
            String data1 = z1.getData_dodania();
            String data2 = z2.getData_dodania();

            String godzina1 = z1.getGodzina_dodania();
            String godzina2 = z2.getGodzina_dodania();

            String czas1 = data1 + " " + godzina1;
            String czas2 = data2 + " " + godzina2;
            //ascending order
            return czas2.compareTo(czas1);

            //descending order
            //return StudentName2.compareTo(StudentName1);
        }};


}
0

Ad.1 Skorzystaj ze zmiany stylu:
http://stackoverflow.com/questions/28738089/change-datepicker-dialog-color-for-android-5-0

Ad.2 W zasadzie nie ma się do czego przyjebać bo test2 test3 test3 test4 test6 test6 jest posortowane po nazwie prawidłowo. Musiałbyś potem zrobić, że jak nazwa jest taka sama to zabiera date i według niej sortuje nazwy.

@JasnyPatryk zamiast mnie wołać to mógłbyś zawołać o pomstę do nieba za kod który musiałem przeczytać :P

0
panryz napisał(a):

Ad.1 Skorzystaj ze zmiany stylu:
http://stackoverflow.com/questions/28738089/change-datepicker-dialog-color-for-android-5-0

Ad.2 W zasadzie nie ma się do czego przyjebać bo test2 test3 test3 test4 test6 test6 jest posortowane po nazwie prawidłowo. Musiałbyś potem zrobić, że jak nazwa jest taka sama to zabiera date i według niej sortuje nazwy.

@JasnyPatryk zamiast mnie wołać to mógłbyś zawołać o pomstę do nieba za kod który musiałem przeczytać :P

Ad1 Próbowałam, ale nie jest to takie proste w przypadku tego typu elementu(divider/selector?).

Ad2 Nazwa każdego elementu jest inna(pierwszy screen), ale przy sortowaniu po nazwie jakimś cudem zamiast elementu test(1) zostaje zamieniony na test3 wzięty nie wiadomo skąd(nie jest to test 3 z pierwszego screena).

0

sort_n.jpg Sortowanie po nazwie
Taką nazwę nosi Twój ostatni screen, który na moje oko jest poprawny.

Pierwszy screen nosi nazwę sort_def.jpg Domyslny widok listy

0

jeżeli chodzi o 1 to może to Ci pomoże.

http://stackoverflow.com/questions/20148671/android-how-to-change-the-color-of-the-datepicker-divider

też kiedyś z tym walczyłem i nie jest to miła walka

Tworzenie za każdym razem nowego adatera to morderstwo na wydajności. Zrób adapter który będzie przechowywał listę obiektów i ją sortuj.A nie za każdym razem twórz nowy adapter.

a że jakieś głupoty Ci wychodzą przy sortowaniu to dlatego:

 for (int i = 1; i < events.size(); i++) {

indeksowanie tablic w javie zaczyna się od 0. Czyli zawsze skracasz swoją listę o 1 element i tak naprwadę w zależności po czym to robisz to to Ci ucina

Jeszcze tak z ciekawości po jaką cholerę ta klasa o wdzięcznej nazwie zdarzenie implementuje serializacje?

1 użytkowników online, w tym zalogowanych: 0, gości: 1