W poprzednim wpisie dodaliśmy bazę danych SQLite. Ale co to za baza, z której nie można edytować lub usuwać z niej danych? Tak więc dzisiaj to zrobimy, a przy okazji omówimy przesyłanie danych między aktywnościami.

Pierwszą rzeczą jaką należy zrobić jest stożenie aktywności która będzie odpowiadała za wyświetlanie detali na temat nawyków.

Następnie w metodzie onBindViewHolder() klasy HabitAdapter przypisujemy dane z bazy do zmiennych, a następnie do obiektu Intent za pomocą metody putExtra().

Wartości mContext.getString(R.string.VARIABLE) to nic innego jak wyjmowanie wartości z pliku strings.xml. Jest to bardzo podobne to przypisywania elementów UI do zmiennych za pomocą findViewById().

Następnie w onCreate() klasy HabitDetailActivity wyciągamy wszystkie dane przesłane za pomocą putExtra() i manipulujemy nimi. Żeby je wyciągnąć musimy utworzyć nowy Intent za pomocą metody getIntent(). Tworzymy jeszcze zmienną detailId, jest ona poza metodą onCreate, ponieważ będziemy jej używać do aktualizowania i usuwania informacji z bazy.

Aktualizowanie bazy

Będziemy wykonywać prostą zmianę dwóch wartości w bazie po naciśnięciu przycisku przez użytkownika. Metoda updateStreakAndDaysLeft() będzie miała typ boolean, ponieważ chcemy później sprawdzić czy aktualizacja się powiodła. W onCreate() przy przypisywaniu zmiennej detailId podaliśmy dwa argumenty metodzie getIntExtra(), drugim argumentem jest domyślna wartość zmiennej – w naszym przypadku to -1. Więc, jeżeli przy przesyłaniu danych między aktywnościami wystąpił błąd to aktualizacja bazy będzie niemożliwa.

Następnym krokiem jest wyjęcie interesujących nas wartości z bazy podobnie jak robiliśmy to w getAllHabits(), a następnie zaktualizowanie ich według naszych potrzeb. Takie zmodyfikowane dane musimy wrzucić do zmiennej typu ContentValues, gdyż zmienna tego typu jest wymagana przez metodę update(). Wszystko jest gotowe i możemy już wrzucić nowe dane z powrotem do bazy. Jako że metoda update() zwraca wartość typu int(ilość wierszy zmodyfikowanych) musimy przekształcić ją na boolean. Robimy to dodając >0 po wywołaniu metody. Warto jest wiedzieć że update() zwróci -1 jeżeli przy aktualizacji wystąpi błąd.

Musimy jeszcze napisać metodę habitPerformed() która zostanie wywołana po naciśnięciu przycisku. Obsłużymy w niej też resztę logiki związanej z aktualizacją danych.

Jak już jesteśmy przy aktualizacji to dodamy jeszcze możliwość edycji rzeczy takich jak nazwa. Stworzymy w tym celu aktywność UpdateHabitActivity, która będzie bliźniaczą kopią AddNewHabitActivity, a różnić będzie się tylko metodami i tym jak interfejs jest wypełniany.

Otwieranie tej aktywności będzie się odbywało z poziomu HabitDetailActivity. Utworzymy w tym celu menu opcji. Do HabitDetailActivity dodajemy dwie metody – onCreateOptionsMenu() która utworzy menu z pliku xml, oraz onOptionsItemSelected() która obsługuje onClick’i w zależności od wybranego elementu menu.

Plik z zawartością menu musi znajdować się w folderze /res/menu.

Dodajemy dodatkowo do menu opcję która pozwoli na…

Usuwanie danych z bazy

Zrealizujemy usuwanie bardzo podobnie do aktualizowania danych, z tą różnicą że logikę zamiast w osobnej metodzie umieścimy wewnątrz onOptionsItemSelected().

Pozostaje tylko dodanie obsługi usuwania wonOptionsItemSelected(). Poza zwykłym sprawdzeniem czy usuwanie przebiegło pomyślnie, dodamy jeszcze okno dialogowe w razie jakby użytkownik się rozmyślił. Dodawanie tego typu okna jest bardzo proste. Należy utworzyć nowy obiekt DialogInterface.OnClickListener, a następnie nadpisać metodę onClick. Później za pomocą AlertDialog.Builder przypisujemy odpowiednie teksty do okna i wywołujemy show().

 

Podziel się z innymi!Share on Facebook
Facebook
Share on Google+
Google+
Tweet about this on Twitter
Twitter