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,
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
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
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
AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setTitle(title);
// inne opcje
return alert;
}kopiuj
wywołanie gdziekolwiek
alert("title").show();kopiuj