首页 > 解决方案 > Moxy 的 MVP。未调用 Fragment 中 Presenter 的回调方法(getViewState() 不为空)

问题描述

我在使用 Moxy 库实现 MVP 时遇到了困难。我阅读了 Moxy 的 github 页面并检查了示例,但任何解决方案都对我没有帮助。

在 MyFragment 中未调用 MyFragmentView 方法的回调,但在 MyFragmentPresenter getViewState() 中返回不为 null。

我的意思是

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
}

不叫。

请帮忙,有什么问题吗?

我的代码如下。

摇篮

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'

我的片段视图

@StateStrategyType(AddToEndSingleStrategy.class)
public interface MyFragmentView extends MvpView {

    void showProgressDialog();
    void hideProgressDialog();

    void showTextTestMessage(String s);
    void showCouldNotRetrieveAccounts();
}

我的片段演示者

@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();
                        }
                )
        );
    }
}

我的片段

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;
    }

}

标签: androidmvprx-androidmoxyandroid-moxy

解决方案


我认为将 dagger 与 moxy 连接时出了点问题。检查 GitHub 上的以下问题: https ://github.com/Arello-Mobile/Moxy/issues/100

伙计们在那里解决同样的问题


推荐阅读