MVP с Мокси.Методы обратного вызова докладчика во фрагменте не вызваны (getViewState () не является нулевым) - PullRequest
0 голосов
/ 26 августа 2018

У меня проблемы с реализацией 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;
    }

}

1 Ответ

0 голосов
/ 28 августа 2018

Я думаю, что-то пошло не так с соединением кинжала с мокси. Проверьте следующую проблему на GitHub: https://github.com/Arello-Mobile/Moxy/issues/100

Парни решают ту же проблему там

...