初识Android MVP(笔记)
来源:互联网 发布:手机网络爸爸 编辑:程序博客网 时间:2024/04/30 04:43
断断续续地看了一段时间的Android MVP,之前怎么都看不懂,今天就好像突然地被点破了一样,看懂了一些,然后就算开始入门了,做些笔记。
其实之前的那些道理或是图还算看得懂,但就是看不懂它的代码,它的流程,具体实现这些。
首先思路被打通是看了纸飞机的一个知乎日报的MVP实现,周末的时候跟踪那些函数跳着跳着就突然理解了,但那个时候还是不懂得具体实现,所以今天其实就像之前入门RxJava的时候一样,既然什么都不懂,那就跟着它们照敲一遍就行了。
首先看下结构:
我发现这个项目跟Google的那个to-do MVP的实现基本一样,虽然平时我们用Activity直接做某个页面的展示,但是它这里是在Activity里嵌套个fragment,这个fragment才是真正的界面,而Activity只是用来做View和Presenter的实例化而已,我一直很纳闷为什么要这样做,但在一篇文章里的评价是虽然麻烦,但这个代价还是值得的,当然它是可选的,主要是为了拥有单独的Presenter类。
先看下代码:
BasePresenter:
public interface BasePresenter { void start();}
BaseView:
public interface BaseView<T> { void setPresenter(T presenter);}
MVPContract:
public interface MVPContract { interface View extends BaseView<Presenter>{ void showText(String text); } interface Presenter extends BasePresenter{ void doSomething(); }}
MVPPresenter:
public class MVPPresenter implements MVPContract.Presenter{ private MVPContract.View mView; private Context mContext; public MVPPresenter(Context context, MVPContract.View view){ this.mView = view; this.mContext = context; view.setPresenter(this); } @Override public void doSomething() { Log.i("MVPPresenter" , "do something"); mView.showText("hello"); } @Override public void start() { }}
MVPTestActivity:
public class MVPTestActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mvp_test); MVPFragment mvpFragment = MVPFragment.newInstance(); getSupportFragmentManager().beginTransaction().add(R.id.fl_container, mvpFragment).commit(); new MVPPresenter(MVPTestActivity.this, mvpFragment); }}
public class MVPFragment extends Fragment implements MVPContract.View, View.OnClickListener { private MVPContract.Presenter presenter; private Button button; private TextView textview; public static MVPFragment newInstance() { Bundle args = new Bundle(); MVPFragment fragment = new MVPFragment(); fragment.setArguments(args); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_mvp_test, container, false); presenter.start(); initView(view); return view; } @Override public void showText(String text) { textview.setText(text); } @Override public void setPresenter(MVPContract.Presenter presenter) { if (presenter != null) { this.presenter = presenter; } } private void initView(View view) { button = (Button) view.findViewById(R.id.button); textview = (TextView) view.findViewById(R.id.textview); button.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button: presenter.doSomething(); break; } }}
这样我们其实基本就实现了Fragment只是用来做显示数据,而真正的操作是在Presenter里。
这里面还是有些东西我不太懂,我应该是基础知识语法这方面还是有不小的欠缺,毕竟这里面的接口多起来,所以逻辑上我就有些搞不懂了。
首先我断点跟了一下:
1.调用MVPTestActivity里的
new MVPPresenter(MVPTestActivity.this, mvpFragment);
public MVPPresenter(Context context, MVPContract.View view){ this.mView = view; this.mContext = context; view.setPresenter(this); }
3.当执行到
view.setPresenter(this);
即调用了setPresenter的接口时
@Override public void setPresenter(MVPContract.Presenter presenter) { if (presenter != null) { this.presenter = presenter; } }
5.于是就完成了Fragment与Presenter的连接。所以接下来要做什么动作,就在contract的presenter里自定义一个方法名,然后在MVPPresenter里做实际操作,在Fragment里调用即可。
注:contract是合同的意思,用“合同接口”能方便的管理View和Presenter,这也确实是个很方便的地方。
待续。。。
参考:MVP之Android官方MVP架构学习—View层和Presenter层
Android构架系列之二--MVP&&Clean理解与实践之MVP
- 初识Android MVP(笔记)
- Android MVP模式之(一)初识
- android 初识mvp
- 初识Android MVP模式
- Android 初识 MVC、MVP框架
- Android 初识mvp设计模式
- Android 初识 MVC、MVP框架
- Android开发之初识MVP模式
- 初识android设计模式—MVP
- MVP初识
- 初识MVP
- 初识MVP
- 初识MVP
- 初识mvp
- android MVP 实践笔记
- Android MVP模式笔记
- Android MVP学习笔记
- Android-BaseLine框架初识之MVP模式最佳方案(三)
- PS光色与像素
- 数据库的升级原理详解
- 线上幽灵 - 笔记
- C#学习笔记1
- 图解aclocal、autoconf、automake、autoheader、configure
- 初识Android MVP(笔记)
- leetcode_效率题解_[python/C++]_21. Merge Two Sorted Lists(合并2个有序链表)
- bash: /bin/rm: 参数列表过长
- Tomcat配置及使用
- Android 中 activity 的生命周期和数据储存
- HTTP 状态吗详解
- 指针
- Java基础——反射
- Hive连接与编程