Created
October 6, 2018 13:38
-
-
Save SabagRonen/5328beebaf5ad61ee7af175312421549 to your computer and use it in GitHub Desktop.
Why Should You Wrap LiveData With Your Own Abstraction
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface MyGeneralObserver<T> { | |
void notifyUpdate(T value); | |
} | |
interface ObservableViewState { | |
void observeTitle(LifecycleOwner lifecycleOwner, MyGeneralObserver<String> observer); | |
} | |
interface IScreenPresenter extends ObservableViewState { | |
void loadData(); | |
} | |
class ScreenPresentationState implements ObservableViewState { | |
private MutableLiveData<String> titleLiveData = new MutableLiveData<>(); | |
@Override | |
public void observeTitle(LifecycleOwner lifecycleOwner, final MyGeneralObserver<String> observer) { | |
titleLiveData.observe(lifecycleOwner, new Observer<String>() { | |
@Override | |
public void onChanged(String s) { | |
if (s != null) { | |
observer.notifyUpdate(s); | |
} | |
} | |
}); | |
} | |
public void updateTitle(String title) { | |
titleLiveData.postValue(title); | |
} | |
} | |
class ScreenPresenter implements IScreenPresenter { | |
private final ScreenPresentationState mState; | |
public ScreenPresenter(ScreenPresentationState state) { | |
mState = state; | |
} | |
@Override | |
public void observeTitle(LifecycleOwner lifecycleOwner, MyGeneralObserver<String> observer) { | |
mState.observeTitle(lifecycleOwner, observer); | |
} | |
@Override | |
public void loadData() { | |
mState.updateTitle(getSomeHowTheTitle()); | |
} | |
private String getSomeHowTheTitle() { | |
return "this is just example"; | |
} | |
} | |
class ScreenView extends AppCompatActivity { | |
@Inject IScreenPresenter mPresenter; | |
@Override | |
protected void onCreate(@Nullable Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
mPresenter.observeTitle(this, new MyGeneralObserver<String>() { | |
@Override | |
public void notifyUpdate(String value) { | |
// render somehow the title | |
} | |
}); | |
mPresenter.loadData(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment