У меня проблемы с реализацией MVP с использованием библиотеки Moxy. Я прочитал страницы Moxy на github и проверил примеры, но любое решение мне не помогает.
В MyFragment обратные вызовы методов MyFragmentView не были вызваны, но в MyFragmentPresenter getViewState () возвращает не нуль.
Я имею в виду, что
getViewState().showProgressDialog();
getViewState().setAccounts(accountsResponse);
getViewState().hideProgressDialog();
вызываются в MyPresenter, но в MyFragment
@Override
public void showProgressDialog() {
// some code
}
@Override
public void hideProgressDialog() {
// some code
}
@Override
public void setAccounts(AccountsResponse accounts) {
// some code
}
не звонил.
Пожалуйста, помогите, что не так?
Мой код ниже.
Gradle
compile 'com.arello-mobile:moxy:1.5.5'
compile 'com.arello-mobile:moxy-app-compat:1.5.5'
compile 'com.arello-mobile:moxy-android:1.5.5'
annotationProcessor 'com.arello-mobile:moxy-compiler:1.5.5'
MyFragmentView
@StateStrategyType(AddToEndSingleStrategy.class)
public interface MyFragmentView extends MvpView {
void showProgressDialog();
void hideProgressDialog();
void showTextTestMessage(String s);
void showCouldNotRetrieveAccounts();
}
MyFragmentPresenter
@PerFragment
@InjectViewState
public class MyFragmentPresenter extends MvpPresenter<MyFragmentView> {
private ApiService apiService;
@Inject
public MyFragmentPresenter(ApiService apiService) {
this.apiService = apiService;
}
public void getAccounts() {
getViewState().showProgressDialog();
getCompositeDisposable().add(apiService.getAccounts()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(accountsResponse -> {
if (accountsResponse.err_code != 0) {
throw new LogicException(accountsResponse.message);
}
return accountsResponse;
})
.subscribe(
accountsResponse -> {
getViewState().setAccounts(accountsResponse);
getViewState().hideProgressDialog();
},
throwable -> {
getViewState().hideProgressDialog();
getViewState().showCouldNotRetrieveAccounts();
}
)
);
}
}
MyFragment
public class MyFragment extends MvpAppCompatFragment implements MyFragmentView {
@Inject
@InjectPresenter
public MyFragmentPresenter mPresenter;
@ProvidePresenter
public MyFragmentPresenter providePresenter() {
return mPresenter;
}
@Override
public void onActivityCreated (@Nullable Bundle savedInstanceState){
ComponentManager.getInstance().getActivityComponent(getActivity()).inject((MyActivity) getActivity());
super.onActivityCreated(savedInstanceState);
mPresenter.getAccounts();
}
@Override
public void showProgressDialog() {
// some code
}
@Override
public void hideProgressDialog() {
// some code
}
@Override
public void setAccounts(AccountsResponse accounts) {
// some code
}
@Override
public void showCouldNotRetrieveBankAccounts() {
// some code
}
}
** MyFragmentPagerAdapter **
public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
@Override
public Fragment getItem (int position){
switch (position) {
case 0:
//
case 1:
//
case 2:
return new MyFragment();
}
return null;
}
@Override
public int getCount() {
return 3;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}