android - 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;
}
}
解决方案
我认为将 dagger 与 moxy 连接时出了点问题。检查 GitHub 上的以下问题: https ://github.com/Arello-Mobile/Moxy/issues/100
伙计们在那里解决同样的问题
推荐阅读
- reactjs - 需要通过鼠标拖动选择react google散点图中的点范围
- python - 使用 Selenium chrome 驱动程序进行 Python 网页抓取
- java - 如何使用 Firebase 的 Java Admin SDK 在单个位置更新对象而不覆盖其他字段?
- javascript - GraphQL 不允许查询不同的字段
- frameworks - 2020年我应该学习哪个Web开发框架?
- bash - unity cloud build Post-Build 脚本上传到 github 页面
- python - 无法从 kafka 主题读取\写入
- python - 从python中的空列表计算新列表的最快方法
- python - 两者如何组合两列不同的数据框,以使它们具有唯一值?
- python - Xarray:ValueError:维度或多索引级别['lons','lats']不存在