Q:

Ejemplo de un ViewModel usando Componente de Google en Android

Estoy intentando implementar un ViewModel siguiendo ese tutorial pero me parece que Google a renovado la librerías y ha dejado la mitad de código obsoleto.
Alguien tiene un ejemplo funcional y su instalación en las dependencias, uso Android Studio 3.0 con target version 26.
No me queda claro si tengo que cargar las dependencias de lyfecircle o no
Adding Components to your Project
Solo necesito un ejemplo funcional una lista de items que al modificar pues se pueda interceptar con el observer

A:

Para la instalación de los componentes de Google solo es necesario añadir al app.gradle la directiva
implementation "android.arch.lifecycle:extensions:1.0.0"
Para crear un ViewModel(Presentador) extender de la clase ViewModel
Los datos que quieren ser observados definirlos con MutableLiveData si es una lista
private MutableLiveData<List<String>> fruitList;
Crear la función para recuperar la lista de datos
 LiveData<List<String>> getFruitList() {
    if (fruitList == null) {
        fruitList = new MutableLiveData<>();
        loadFruits();
    }
    return fruitList;
}

Para la tarea de llenado usar tareas de segundo plano, así se evita congelar la UI
private void loadFruits() {
    // do async operation to fetch users
    Handler myHandler = new Handler();
    myHandler.postDelayed(() -> {
        List<String> fruitsStringList = new ArrayList<>();
        fruitsStringList.add("Mango");
        fruitsStringList.add("Apple");
        fruitsStringList.add("Orange");
        fruitsStringList.add("Banana");
        fruitsStringList.add("Grapes");
        long seed = System.nanoTime();
        Collections.shuffle(fruitsStringList, new Random(seed));

        fruitList.setValue(fruitsStringList);
    }, 5000);

}

Para detectar que la actividad donde hay el observador se ha cerrado completamente, se usa el evento onCleared
@Override
protected void onCleared() {
    super.onCleared();
    Log.d(TAG, "on cleared called");
}

En la actividad para obtener los cambios de la lista y modificar la UI para mostrar los cambios
ViewModelProviders.of(this).get(youViewModel.class);
        model.getFruitList().observe(this, fruitlist -> {
            // update UI from List List<String> fruitlist

        });
    }

Extraído de ese tutorial en inglés

