JAVA ANDROID 06 (p) - Sqlite cz2 - edycja notatek

JAVA ANDROID 06 (p) - Sqlite cz2 - edycja notatek
ukryj menu
SPEC
aktualizacja: 2022-04-12 09:16:25

T: edycja notatek

Scenariusz aplikacji na dziś:
- Długie przytrzymanie elementu ListView z notatkami, powoduje wyświetlenie Dialoga z opcjami (konstrukcja jak tydzień temu przy dodawaniu notatki):


usuń,
aktualizuj,
sortuj wg tytułu,
sortuj wg koloru,


1. usuwanie notatki

do poniższej funkcji, zamieszczonej w klasie DatabaseManager podaj id notatki do usunięcia

SQLiteDatabase db = this.getWritableDatabase();
       
return db.delete("tabela",
                "_id = ? ",
                new String[]{id}); // chodzi o id w tej liniikopiuj




2. aktualizacja notatki

najlepiej działać z użyciem tego samego customowego dialoga, który służył do wprowadzania danych do bazy

można edytować tytuł, treść, kolor

do poniższej funkcji podaj id notatki do aktualizacji

SQLiteDatabase db = this.getWritableDatabase();

ContentValues contentValues = new ContentValues();
contentValues.put("a", "aaa");
contentValues.put("b","bbb");

db.update("tabela",
   contentValues,
   "_id = ? ",
   new String[]{id}); // chodzi o id w tej linii
db.close();kopiuj


3. sortowanie notatek

sortowanie według tytułu, koloru

sortowanie obiektów klasy KlasaDoSortowania (w naszym wypadku Note), wg wybranego pola


Collections.sort(arraylist, new Comparator<KlasaDoSortowania>() {
    @Override
    public int compare(KlasaDoSortowania a, KlasaDoSortowania b) {
        return a.getPole().compareTo(b.getPole());
    }
});kopiuj


4. testowanie sortowania, jeśli ktoś nie ma wcześniejszych części

klasa Data do sortowania (osobny plik)

public class Data {
    String imie;
    String nazwisko;

    public Data(String imie, String nazwisko) {
        this.imie = imie;
        this.nazwisko = nazwisko;
    }

    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }
}
kopiuj

lista w Activity i dane do niej

private ArrayList<Data> list = new ArrayList<>();

list.add(new Data("Jan", "Kowalski"));
list.add(new Data("Anna", "Nowak"));
list.add(new Data("Piotr", "Kot"));
list.add(new Data("Jerzy", "Misiewicz"));kopiuj


sortowanie wg nazwiska

Collections.sort(list, new Comparator<Data>() {
   @Override
   public int compare(Data a, Data b) {
      return a.getNazwisko().compareTo(b.getNazwisko());
   }
});kopiuj


wypisanie w logu

for(int i = 0;i<list.size();i++)
   Log.d("xxx", list.get(i).getImie()+","+list.get(i).getNazwisko());kopiuj



po wykonaniu tej funkcji ArrayList z danymi z bazy jest posortowany

5. dynamiczne generowanie dowolnego View, potrzebne do kolorów

przypomnienie

for(int i = 0;i<5;i++){
   Button b = new Button (context); // nowy Button
   b.setLayoutParams(new LinearLayout.LayoutParams(100,100)); //jego wielkość
   b.setBackgroundColor(0xffff0000); // tło
   anyLayout.addView(b); // dodanie do elementu nadrzędnego
}kopiuj


6. okrągłe View, dodatek

uwaga: bardzo różnie działa w różnych wersjach androida, dlatego niekonieczne

prawy klawisz na folder /res
new android resource file
name: np circle
resource type: drawable
root element: shape
w znaczniku shape piszemy shape="oval"


w środku można używać znaczników <solid lub <stroke lub <gradient

w całości plik circle.xml wygląda tak

wersja z pełnym kolorem

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#ffff0000"></solid>
</shape>kopiuj


wersja z gradientem

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <gradient android:startColor="#ffff0000" android:endColor="#ff0000ff"></gradient>
</shape>kopiuj


potem tego shape używamy jako background dla innego View w Activity

statycznie

<View
   android:layout_width="200dp"
   android:layout_height="200dp"
   android:background="@drawable/circle2"
/>kopiuj


to samo dla dynamicznie generowanych View

for (...) {
   View view = new View(MainActivity.this);
   view.setBackgroundResource(R.drawable.circle);
   ((GradientDrawable)view.getBackground()).setColor(kolor); // ustawienie koloru tła innego niż w xml
   view.setLayoutParams(new LinearLayout.LayoutParams(50, 50)); // wielkośc view
   container.addView(view);
}kopiuj


7. funkcja zwracająca alerta

w projekcie jest sporo alertów, warto nie powtarzać za każdym razem całej funkcji tylko wykonać
funkcję zwracającą alerta

public AlertDialog.Builder alert(String title) {

   AlertDialog.Builder alert = new AlertDialog.Builder(context);
   alert.setTitle(title);
       
   // inne opcje

   return alert;
}kopiuj

wywołanie gdziekolwiek

alert("title").show();kopiuj