-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


[ ] ViewModel LiveData:

, 24 2017 . 15:48 +
artem_dobrovinskiy 15:48

ViewModel LiveData:

, ! ViewModels and LiveData: Patterns + AntiPatterns Jose Alc'erreca.

View ViewModel



, :

image

ViewModel Android. , - . ViewModel android.* ( android.arch.*). Presenter.
ViewModel ( Presenter) Android

, ViewModel , . View unit- ( , Robolectric), . View ViewModel ( Presenter). Passive View.

View ViewModel


ViewModels . , ViewModel , . ViewModel , .

ViewModels :

image

View ( ) ViewModel . , ViewModel , . View , .
View ViewModels.
ViewModel View observer pattern, LiveData observable .

Observer Pattern ( )


image

Android , View ( ) ( ) ViewModel. .. ViewModel Android, , Android View. :

  1. ViewModel , ( , ) .
  2. - , observable ViewModel . , . NPE View.
  3. ViewModel View, .

:

private void subscribeToModel() {
  // Observe product data
  viewModel.getObservableProduct().observe(this, new Observer() {
      @Override
      public void onChanged(@Nullable Product product) {
        mTitle.setText(product.title);
      }
  });
}
, UI, UI .

ViewModel


. ViewModel , , :


, domain .


, . :

  1. :
  2. :

, presentation . . , .

.


: LiveData, ViewModel, . View ?

LiveData ViewModel. , MyDataState , , .

image

, (, ). . Resource (TODO: add link)
Expose , LiveData.


, , . ViewModel. ViewModel .

, ViewModel : , .

UI , onSaveInstanceState() ViewModel.

.: ViewModels: Persistence, onSaveInstanceState(), Restoring UI State and Loaders Events


-, . ViewModel , ? , Snackbar , .

, LiveData . ViewModel :

LiveData snackbarMessage = new MutableLiveData<>();

ViewModel, ViewModel :

snackbarMessage.setValue(" !");

Snackbar. .

, , ViewModel. LiveData, !

, SingleLiveEvent ( LiveData). , . , .
, Snackbar observable SingleLiveEvent.

ViewModels


Android, .. UI . LiveData , LiveData.

, ViewModels , . Presentation observer pattern Data, .
Observer pattern UI Data:

image

, ViewModel . - , . . ViewModel .
, ViewModel :

image

, ViewModel . ViewModel' , View, :

image

:

  • ViewModel.onCleared() , ViewModel.
  • WeakReference Event Bus ( ).
  • LiveData ViewModel , View ViewModel.
, , .
ViewModel , . , ViewModel .

LiveData


ViewModel , :

image

ViewModel view , :

image

: ViewModel, LifecycleOwner? . Transformations.switchMap LiveData, LiveData. observer :

LiveData repo = Transformations.switchMap(repoIdLiveData, repoId -> {
        if (repoId.isEmpty()) {
            return AbsentLiveData.create();
        }
        return repository.loadRepo(repoId);
    }
);

[]

, , . LifecycleOwner repository.loadRepo(id).
, , Lifecycle ViewModel, Transformation .

LiveData


LiveData MutableLiveData ViewModel LiveData , .

, LiveData , . , , .

public class MyLiveData extends LiveData {

    public MyLiveData(Context context) {
        // Initialize service
    }

    @Override
    protected void onActive() {
        // Start listening
    }

    @Override
    protected void onInactive() {
        // Stop listening
    }
}

LiveData


onActive() - , , , , LiveData . :

start() ViewModel [. Blueprints]
, [. GithubBrowserExample].
LiveData . ViewModel .
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/338590/

:  

: [1] []
 

:
: 

: ( )

:

  URL