MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I...

12
MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY

Transcript of MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I...

Page 1: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

MVVM w AndroidKONWENCJA ORGANIZACJI PROJEKTU

I DATA BINDING LIBRARY

Page 2: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

Składowe aplikacji

Page 3: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

ActivityActivities stanowią „widoki” aplikacji. Składają się z pliku XML zawierającego definicję layout’u, oraz klasy JAVA implementującej zachowanie widoku

Page 4: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

KomunikacjaDane <-> WidokDużą część Activity stanowi „gluecode” odpowiedzialny za przekazanie danych do / z widoku.

Page 5: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

ProblemyOGROMNE KLASY ACTIVITY UTRUDNIONE TESTOWANIE JEDNOSTKOWE

Page 6: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

Rozwiązanie –wzorzec MVVMPodział kodu Activity na 3 rodzaje klas:

• Widok (Activity wraz z XML) -„platform-specific”

• Model – „platform-independent”

• ViewModel – nie „platform-independent”

ViewModel można testować jednostkowo

Page 7: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

Data Binding Library

Bardzo przyjemna biblioteka pozwalająca na ograniczenie widoków niemal wyłącznie do layout’ów XML.

Page 8: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

<ImageView

android:layout_width="100dp"

android:layout_height="100dp"

android:id="@+id/image"

bind:imageBitmap="@{viewModel.thumbBitmap}"/>

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:id="@+id/text"

android:layout_marginTop="5dp"

android:gravity="center"

android:textSize="12sp"

android:text="@{viewModel.title}"/>

Prosty bindingLAYOUT.XML VIEWMODEL.JAVA

private ObservableField<String> filePath;

private ObservableField<Bitmap> thumbBitmap;

private ObservableField<Bitmap> photoBitmap;

private ObservableField<String> title;

Page 9: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

AkcjeLAYOUT.XML VIEWMODEL.JAVA

public void fabClicked(View v) {

access.takePicture();

}

<android.support.design.widget.FloatingActionButton

android:id="@+id/fab"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="bottom|end"

android:layout_margin="@dimen/fab_margin"

app:srcCompat="@drawable/ic_camera_white_48dp"

android:onClick="@{viewModel::fabClicked}"/>

Page 10: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

Adaptery atrybutówLAYOUT.XML ADAPTERS.JAVA

<android.support.v7.widget.RecyclerView

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/photo_recycler"

android:scrollbars="vertical"

app:itemViewBinder="@{viewModel.itemViewBinder}"

app:items="@{viewModel.photos}" />

@BindingAdapter("items")

public static <T> void setItems(RecyclerView recyclerView, Collection<T>

items)

{

BindingRecyclerViewAdapter<T> adapter =

(BindingRecyclerViewAdapter<T>) recyclerView.getAdapter();

if (adapter != null)

{

adapter.setItems(items);

adapter.notifyDataSetChanged();

}

else

{

recyclerView.setTag(KEY_ITEMS, items);

}

}

Page 11: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

KonwerteryLAYOUT.XML CONVERTERS.JAVA

<Viewandroid:background="@{isError ? @color/red : @color/white}"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

@BindingConversionpublic static ColorDrawable convertColorToDrawable(int color) {

return new ColorDrawable(color);}

Page 12: MVVM w Android - Poznań University of Technology...MVVM w Android KONWENCJA ORGANIZACJI PROJEKTU I DATA BINDING LIBRARY Składowe aplikacji Activity Activities stanowią „widoki”

Prezentacja na przykładzie