Android的MVP
来源:互联网 发布:第一次欧洲旅游知乎 编辑:程序博客网 时间:2024/06/07 06:37
关于Android的MVP模式
M:Model
V:view
P:Presenter
M:用来处理比较繁杂的业务逻辑
V:负责界面的更新和界面数据的获取,也可以和之前一般的做法,处理一些比较简易的逻辑
P:介于M和V之间,个人理解的作为M和V的连接通信的桥梁
View一般的做法是定义一个接口,用于处理更新等业务
比如下面的接口:
public interfaceIPlaceActivityViewForModel {
voidsetTextForTextView(String text);
void getLocationResult(LocationResultBean bean);
void getReverseGeoCodeResultBean(ReverseGeoCodeResult beanResult,LatLng locationLatLng);
void showToastText(String text);
}
在对应的Activity实现上述接口的方法
比如(这是一个百度地图的例子):
public class ChoosePlaceOnMapActivityextends Activityimplements IPlaceActivityViewForModel {
privateMapView mMapView= null;
private BaiduMapmBaiduMap =null;
private LocationClientmLocationClient =null;
private GeoCodermGeoCoder =null;//搜索,地理编码反编码
privateDouble latitude;
private Doublelongitude;
private TextViewtext_view_show_id;
private LatLnggeocoderLatLng =null;
private PlacePointPresenterplacePointPresenter =new PlacePointPresenter(this);
@Override
protected voidonStart() {
super.onStart();
getLocation();
getGeoCoder();
placePointPresenter.setIPlaceActivityViewForModel(this);
}
@Override
protected voidonRestart() {
super.onRestart();
}
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_place_onmap);
mMapView= (MapView) this.findViewById(R.id.place_map);
mBaiduMap= mMapView.getMap();
text_view_show_id= (TextView) this.findViewById(R.id.text_view_show_id);
}
private voidgetMap(){
//获取屏幕高度宽度
WindowManager wm = (WindowManager)this
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm =new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
// mMapView.removeViewAt(1); //去掉logo
mMapView.showZoomControls(true);
//获得百度地图状态
MapStatus.Builder builder =new MapStatus.Builder();
// builder.targetScreen(new Point(width/2,height/2));
//定位的坐标点
LatLng latLng =new LatLng(latitude,longitude);
// BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);
// OverlayOptions overlay = new MarkerOptions().position(latLng).icon(bitmap);
// map.addOverlay(overlay);
//设置地图中心为定位点
builder.target(latLng);
//设置缩放级别 18对应比例尺50米
builder.zoom(18);
MapStatus mapStatus = builder.build();
MapStatusUpdate m = MapStatusUpdateFactory.newMapStatus(mapStatus);
mBaiduMap.setMapStatus(m);
mBaiduMap.setOnMapStatusChangeListener(newBaiduMap.OnMapStatusChangeListener() {
@Override
public voidonMapStatusChangeStart(MapStatus arg0) {
//TODO Auto-generated method stub
}
@Override
public voidonMapStatusChangeFinish(MapStatus arg0) {
//TODO Auto-generated method stub
LatLng target =mBaiduMap.getMapStatus().target;
System.out.println(target.toString());
mGeoCoder.reverseGeoCode(newReverseGeoCodeOption().location(target));
}
@Override
public voidonMapStatusChange(MapStatus arg0) {
//TODO Auto-generated method stub
}
});
}
private voidgetLocation(){
mLocationClient= newLocationClient(getApplicationContext()); //声明LocationClient类
placePointPresenter.setInitBdLocation(mLocationClient);
}
public voidshowToastText(String text){
Toast.makeText(ChoosePlaceOnMapActivity.this,text,Toast.LENGTH_LONG).show();
}
private voidgetGeoCoder(){
mGeoCoder= GeoCoder.newInstance();
placePointPresenter.setInitGeoCoder(mGeoCoder);
}
@Override
protected voidonPause() {
//TODO Auto-generated method stub
super.onPause();
mMapView.onPause();
}
@Override
protected voidonResume() {
//TODO Auto-generated method stub
super.onResume();
mMapView.onResume();
}
@Override
protected voidonDestroy() {
//TODO Auto-generated method stub
super.onDestroy();
mMapView.onDestroy();
mLocationClient.stop();
mGeoCoder.destroy();
}
@Override
public voidsetTextForTextView(String text) {
text_view_show_id.setText(text);
}
@Override
public voidgetLocationResult(LocationResultBean bean) {
latitude= bean.latitude;
longitude= bean.longitude;
setTextForTextView(bean.address);
getMap();
}
@Override
public voidgetReverseGeoCodeResultBean(ReverseGeoCodeResult beanResult,LatLng locationLatLng) {
geocoderLatLng= beanResult.getLocation();
}
/**
* 确定按钮的响应
*@param view
*/
public voidonClickForButtonYes(View view){
String placeText = text_view_show_id.getText().toString();
Intent intent =new Intent();
intent.putExtra("LatLng",geocoderLatLng);
intent.putExtra("text",placeText);
ChoosePlaceOnMapActivity.this.setResult(3,intent);
ChoosePlaceOnMapActivity.this.finish();
}
}
其中PlacePointPresenter类
就是Presenter,具体代码如下,当中使用到上面定义的接口,接口中的方法在Activity,也就是我们说的View层中实现,在Presenter中进行调用,那么调用的地方一般就是在业务逻辑处理后,具体根据需要做判断吧,当中自然也就包含了业务逻辑实现的类DealWithPlacePointForModelImpl,此类内容在本文中就不再给出了。
public class PlacePointPresenter {
private static finalString TAG= "PlacePointPresenter";
private IPlaceActivityViewForModeliPlaceActivityViewForModel;
private Contextcontext;
private DealWithPlacePointForModelImpldealWithPlacePointForModel;
public PlacePointPresenter(Context context){
this.context= context;
dealWithPlacePointForModel= newDealWithPlacePointForModelImpl(context);
}
public voidsetIPlaceActivityViewForModel(IPlaceActivityViewForModel iPlaceActivityViewForModel){
this.iPlaceActivityViewForModel= iPlaceActivityViewForModel;
}
public voidsetInitGeoCoder(GeoCoder mGeoCoder){
dealWithPlacePointForModel.doGeoCoder(mGeoCoder, newDealWithPlacePointForModelImpl.OnGeoCoderResultListener() {
@Override
public voidonReverseGeoCode(ReverseGeoCodeResult result) {
iPlaceActivityViewForModel.setTextForTextView(result.getAddress());
iPlaceActivityViewForModel.getReverseGeoCodeResultBean(result,result.getLocation());
}
@Override
public voidonGeoCoder(GeoCodeResult result) {
}
@Override
public voidonNoResult(String text) {
iPlaceActivityViewForModel.showToastText(text);
}
});
}
public voidsetInitBdLocation(LocationClient mLocationClient){
dealWithPlacePointForModel.doLocation(mLocationClient, newDealWithPlacePointForModelImpl.OnLocationStatusListener() {
@Override
public voidonLocationStatusSuccess(LocationResultBean bean) {
iPlaceActivityViewForModel.getLocationResult(bean);
}
});
}
}
- Android的MVP
- Android MVP的学习
- Android的MVP框架
- Android MVP 的理解
- Android的MVP模式
- Android的MVP模式
- Android的MVP模式
- 架构:Android的MVP
- android的mvp架构
- Android的MVP
- Android的MVP模式
- Android MVP的好处
- android的MVP架构
- 吴小龙的 mvp Android MVP 实例
- Android MVP 概述:MVP的组件介绍
- Android上的MVP模式
- Android MVP模式的应用
- 说说Android的MVP模式
- RimWorld模组教程之入门
- USB调试无法打开时的救命神器
- codeforces 599D. Spongebob and Squares【推公式+暴力枚举】
- 异常处理(004)_finally关键字如何使用
- 关于LeetCode中String to Integer (atoi)一题的理解
- Android的MVP
- 如何计算文档相似性
- Sqrt(x) -- leetcode
- ibatis数据表和JavaBean映射的问题
- LeetCode-remove-element
- cell重用出错
- 集合详解之HashMap
- java设计模式-模板方法模式
- java SSLSocket的详解