比如说 某个activity中有个listview或者viewpager,那它需要的adapter应该放在activity中还是放在presenter内呢?
我理解的MVP view不应该和model有交互,也就是说adapter和从model获取的数据(List<Bean>或者List<Fragment>之类的) 都应该放到presenter里,由presenter的方法(比如 getViewpagerAdapter之类的)提供。这样理解的话正确吗 求解释。。。
如果有对应的代码就更好了
比如说 某个activity中有个listview或者viewpager,那它需要的adapter应该放在activity中还是放在presenter内呢?
我理解的MVP view不应该和model有交互,也就是说adapter和从model获取的数据(List<Bean>或者List<Fragment>之类的) 都应该放到presenter里,由presenter的方法(比如 getViewpagerAdapter之类的)提供。这样理解的话正确吗 求解释。。。
如果有对应的代码就更好了
你这样的理解是可以的。
建议是可以看一些采用MVP框架的项目来加深自己的理解,推荐两个项目:
LookLook
StylishMusicPlayer
还有一种MVP架构是使用Activity和Fragment作为Presenter层的,可以见:
TheMVP
public interface INewsContract {
interface Model {
//to presenter
void newsRequestService() throws Exception;
}
interface View {
//to presenter
void showNews(List<BeanNews> newsList);
void showRefresh();
void hideRefresh();
}
interface class Presenter {
//to view
public abstract void newsRequest();
//to model
public abstract void newsResultSuccess(List<BeanNews> newsList);
public abstract void newsRequestFailure();
}
}
您好,以上是我的协议解决方案,
以下我的解决方案的具体解析,希望对您有帮助。。
0.首先View端初始化一个带有空List数据的Adapter.
1.View端开启刷新showRefresh()去调用Presenter的newsRequest()函数;
2.Presenter负责调度把消息传给Model调用其newsRequestService()函数负责具体实施;
3.Model端开启异步线程去处理网络请求得到List<BeanNews>数据,将成功获取得到的结果回传给Presenter端的newsResultSuccess(List<BeanNews> newsList)函数.
4.Presenter端调用View端提供的showNews(List<BeanNews> newsList)函数把Model回传的List<BeanNews>数据进行转发,最后数据将在View端调用Adapter.setNewData(List)进行展示.
附拿到数据后再View端UI展示的代码(UI写在了fragment中):
getActivity().runOnUiThread( ()-> {
if (mNewsAdapter != null) {
mNewsAdapter.setNewData(mNewsList);
}
});
2 回答1.3k 阅读✓ 已解决
2 回答2.7k 阅读
2 回答1.7k 阅读
1 回答2.1k 阅读
1 回答1.2k 阅读
1 回答1.2k 阅读
1 回答592 阅读✓ 已解决
理解没错,?
Adapter <- ListView <- Activity <-> Presenter <-> Model
View:
Model:
Presenter:
参考:
android-architecture
MVC,MVP 和 MVVM 的图示