http://blog.csdn.net/lmj623565791/article/details/51339751;
本文出自:【张鸿洋的博客】
昨天晚上看了下我的偶像鸿神的博客,他博客中有一篇Android的mvp与传统的mvc的比较,我阅读了一遍之后,整个人神清气爽,太棒了,不愧是我的鸿神,然后自己吧思路整理了下,通过自己的理解吧他写在自己的博客上,以便不时之需。
mvc是业务逻辑层,视图层,控制层。由于Android的layout的布局的原因,导致视图层也被放到了activity中,又由于activity本身承担着控制层的任务,这样一看来,就会导致activity中代码很臃肿,不便于管理。下面是我用他的例子敲的
public interface RequestBiz {
//定义一个接口,
public void requestData(RequestListener listener);
}
import java.util.List;
/**
* 回调函数
*
*/
public interface RequestListener {
public void onsucess(List<String> data);
public void foresult();
}
//实现它的方法
public class RequestBizImp implements RequestBiz {
@Override
public void requestData(final RequestListener listener) {
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
List<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
String name = "刘备" + i;
list.add(name);
}
if (list != null) {
// 获取到的数据添加到回调函数中
listener.onsucess(list);
}else{
<span style="white-space:pre"> </span>listener.<span style="font-family: Arial, Helvetica, sans-serif;">foresult();</span>
}
}).start();
}
}
//在MainActivity中
public class MainActivity extends Activity
OnItemClickListener {
private ListView listview;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
// mvcģʽ
mvc();
}
private void mvc() {
RequestBiz biz = new RequestBizImp();
biz.requestData(new RequestListener() {
@Override
public void onsucess(final List<String> data) {
// TODO Auto-generated method stub
handler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getApplicationContext(),
android.R.layout.simple_list_item_1, data);
listview.setAdapter(adapter);
}
});
}
@Override
<span style="white-space:pre"> </span>public void foresult() {
<span style="white-space:pre"> </span>// TODO Auto-generated method stub
<span style="white-space:pre"> </span>System.out.println("数据为空");
<span style="white-space:pre"> </span>}
});
}
//mvp的模式
此图在鸿神博客中截取出来的。便于我以后参加的理解。
有图的话我就无需废话了,直接上代码
activity管理view
public interface Myview {
// mvp是activity控制view
public void listData(List<String> list);
}
public class Persten {
private RequestBiz biz;
private Myview myview;
private Handler handler;
public Persten(Myview myview) {
// 初始化
this.myview = myview;
// 实现接口
biz = new RequestBizImp();
handler = new Handler(Looper.getMainLooper());
}
// 初始化数据
public void onResume() {
biz.requestData(new RequestListener() {
@Override
public void onsucess(final List<String> data) {
// TODO Auto-generated method stub
handler.post(new Runnable() {
@Override
public void run() {
myview.listData(data);
}
});
}
});
}
public void getPostion(int postion) {
Toast.makeText(MyAppliction.getContext(), "第" + postion + "项", 0)
.show();
}
public class MainActivity extends Activity implements Myview,
OnItemClickListener {
private ListView listview;
...............
private Persten persten;
persten = new Persten(this);
<span style="white-space:pre"> </span>listview.setOnItemClickListener(this);
@Override
<span style="white-space:pre"> </span>protected void onResume() {
<span style="white-space:pre"> </span>// TODO Auto-generated method stub
<span style="white-space:pre"> </span>super.onResume();
<span style="white-space:pre"> </span>// 初始化数据
<span style="white-space:pre"> </span>persten.onResume();
<span style="white-space:pre"> </span>}
@Override
<span style="white-space:pre"> </span>public void listData(List<String> list) {
<span style="white-space:pre"> </span>ArrayAdapter<String> adapter = new ArrayAdapter<String>(
<span style="white-space:pre"> </span>getApplicationContext(), android.R.layout.simple_list_item_1,
<span style="white-space:pre"> </span>list);
<span style="white-space:pre"> </span>listview.setAdapter(adapter);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void onItemClick(AdapterView<?> adapterView, View view, int postion,
<span style="white-space:pre"> </span>long l) {
<span style="white-space:pre"> </span>// TODO Auto-generated method stub
<span style="white-space:pre"> </span>persten.getPostion(postion);
<span style="white-space:pre"> </span>}
感谢我的鸿神,<span style="color: rgb(85, 85, 85); font-family: 'microsoft yahei'; font-size: 14px; line-height: 17.5px; background-color: rgba(128, 128, 128, 0.0470588);">本文出自:</span><a target=_blank href="http://blog.csdn.net/lmj623565791/" style="text-decoration: none; box-sizing: border-box; color: rgb(12, 137, 207); font-family: 'microsoft yahei'; font-size: 14px; line-height: 17.5px; background-color: rgba(128, 128, 128, 0.0470588);">【张鸿洋的博客】</a>