SignUpFragmentは、SignUpPresenterとSignUpFragmentをSignUpViewに埋め込んで使用します。私はSignUpPresenterに私はRxAndroidを経由して検証を追加するかどうかを知りたいMVPパターンでPresenterの指定されたビューコンポーネントにアクセスする方法は?
view().showResult()
view().showError()
::のような)
public abstract class BasePresenter<V> {
private WeakReference<V> mView;
public void bindView(@NonNull V view) {
mView = new WeakReference<>(view);
if (setupDone()) {
updateView();
}
}
public void unbindView() {
mView = null;
}
protected V view() {
if (mView == null) {
return null;
} else {
return mView.get();
}
}
protected abstract void updateView();
private boolean setupDone() {
return view() != null;
}
}
public interface SignUpView extends BaseView {
void showResult(UserInfo result);
}
SignUpPresenter(ビュー経由SignUpFragmentと接続:SingUpPresenterはBasePresenterがBasePresenter を拡張
Observable<CharSequence> loginObservable = RxTextView.textChanges(mEmail);
SignUpPresenterのSignUpFragmentのmEmailにアクセスしたいということです。
私はmEail = view().getEditTextEmail();
ようSignUpPresenterに使用することができますまたは私はアクティビティ/フラグメント内のすべてのこの部分を追加する必要が
public EditText getEditTextEmail(){return mEmail;}
:ようSignFramgnet方法でメソッドを追加することがokです
Observable<CharSequence> loginObservable = RxTextView.textChanges(mLogin);
loginObservable
.map(this::isValidLogin)
.subscribe(isValid -> mLogin.setCompoundDrawablesRelativeWithIntrinsicBounds(null,null, (isValid ? mValidField : mInvalidField), null));
通常、あなたのプレゼンターはAndroidについて何も知っていないはずなので、Presenter内の 'RxTextView'を使用すると場所が違って見えます。 – Egor
素晴らしい!そのような場合、これをFramgnet/Activityにすべて追加する必要がありますか? 監視可能な emailObservable = RxTextView.textChanges(mEmail); emailObservable .map(this :: isValidEmail) .subscribe(isValid - > mEmail.setCompoundDrawablesRelativeWithIntrinsicBounds(null、null、(isValid?mValidField:mInvalidField)、null)); –
はい、これはすべて私のUIコードのようです。 Presenterが電子メールを検証するようにするには、 'presenter.isValidEmail()'に対してマップするだけです。 – Egor