江门网站建设多少钱,怎么做素材设计网站,北京游戏网站建设,新网域名管理平台前言
Model#xff1a;负责数据逻辑
View#xff1a;负责视图逻辑
Controller#xff1a;负责业务逻辑 持有关系#xff1a;
1、View 持有 Controller
2、Controller 持有 Model
3、Model 持有 View 辅助工具#xff1a;ViewBinding 执行流程#xff1a;View …前言
Model负责数据逻辑
View负责视图逻辑
Controller负责业务逻辑 持有关系
1、View 持有 Controller
2、Controller 持有 Model
3、Model 持有 View 辅助工具ViewBinding 执行流程View Controller Model View 案例效果图 1、定义Controller接口
/*** 控制器接口 负责业务逻辑*/
public interface IController extends IBaseController {void setModel(IModel model); // 持有model/*** 这些都是方法都是由 View 调用的*/void onDataChanged(String data); // 监听输入文本事件通知 Modelvoid submitFrom(); // 提交表单事件通知 Modelvoid clearData(); // 清空按钮点击事件通知 Model}1.1、实现Controller接口
/*** 业务逻辑 具体实现*/
public class IControllerImp implements IController {private IModel model;Overridepublic void setModel(IModel model) {this.model model;}Overridepublic void removeHandlerMsgAndCallback() {model.removeHandlerMsgAndCallback();}Overridepublic void onDataChanged(String data) {model.onDataChanged(data);}Overridepublic void submitFrom() {model.submitFromData();}Overridepublic void clearData() {model.clearData();}
} 2、定义Model接口
/*** 数据模型接口 负责数据逻辑*/
public interface IModel extends IBaseModel {void setView(IView view); // 持有View/*** 这些都是方法都是由 Controller 调用的*/void onDataChanged(String data); // 监听文本变化时时更新数据后通知 Viewvoid submitFromData(); // 提交表单数据后通知 Viewvoid clearData(); // 清空数据后通知 View} 2.1、实现Model接口
/*** 数据模型逻辑 具体实现*/
public class IModelImp implements IModel {private String mData ;private Handler handler new Handler();private IView iview;Overridepublic void setView(IView view) {this.iview view;}Overridepublic void removeHandlerMsgAndCallback() {handler.removeCallbacksAndMessages(null);}Overridepublic void onDataChanged(String data) {mData data;iview.onDataChangedUpdateText(data);}Overridepublic void submitFromData() {iview.showSubmitFromLoading(mData);handler.removeCallbacksAndMessages(null);handler.postDelayed(new Runnable() {Overridepublic void run() {iview.hideSubmitFromLoading();}}, 1500);}Overridepublic void clearData() {mData ;iview.clearFromData();}
}3、定义View接口
/*** 视图接口 负责视图逻辑*/
public interface IView extends IBaseView {default void setController(IController controller) {} // 持有控制器根据View事件通知 Controller/*** 这些都是方法都是由 Model 调用的*/void onDataChangedUpdateText(String data); // 根据时时数据更新TextViewvoid showSubmitFromLoading(String data); // 显示loadingvoid hideSubmitFromLoading(); // 隐藏loadingvoid clearFromData(); // 清空EditText数据} 3.1、实现View接口
/*** 视图逻辑 具体实现*/
public class MVCActivity extends AppCompatActivity implements IView,View.OnClickListener {private IModel iModel; // 数据层 Mprivate IController iController; // 控制器层 Cprivate AlertDialog dialog;private ActivityMvcBinding binding;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding ActivityMvcBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());iModel new IModelImp();iController new IControllerImp();// 注意一下写的顺序iModel.setView(this); // 持有ViewiController.setModel(iModel); // 持有ModelsetController(iController); // 持有控制器init();}Overridepublic void onClick(View v) {if (v binding.submitBtn) {iController.submitFrom();} else if (v binding.clearBtn) {iController.clearData();}}Overrideprotected void onDestroy() {super.onDestroy();iController.removeHandlerMsgAndCallback();}private void init() {binding.editMsg.setText(normal);binding.edit.addTextChangedListener(new TextWatcher() {Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {iController.onDataChanged(s.toString());}Overridepublic void afterTextChanged(Editable s) {}});binding.submitBtn.setOnClickListener(this);binding.clearBtn.setOnClickListener(this);}Overridepublic void onDataChangedUpdateText(String data) {binding.editMsg.setText(data);}Overridepublic void showSubmitFromLoading(String data) {AlertDialog.Builder builder new AlertDialog.Builder(this);TextView textView new TextView(this);if (TextUtils.isEmpty(data)) {data normal;}textView.setText(正在提交 data);builder.setCancelable(false);builder.setView(textView);dialog builder.show();}Overridepublic void hideSubmitFromLoading() {dialog.dismiss();}Overridepublic void clearFromData() {binding.edit.setText();binding.editMsg.setText(normal);}
} 4、IBaseController
/*** Base 控制器接口 负责业务逻辑*/
public interface IBaseController {// 写一些公用或者通用的方法用于扩展default void removeHandlerMsgAndCallback() {} // 删除handler 回调和消息}5、IBaseModel
/*** Base 数据模型接口 负责数据逻辑*/
public interface IBaseModel {// 写一些公用或者通用的方法用于扩展default void removeHandlerMsgAndCallback() {} // 删除handler 回调和消息}6、IBaseView
/*** Base 视图接口 负责视图逻辑*/
public interface IBaseView {// 写一些公用或者通用的方法用于扩展default void testBaseView() {}} 7、activity_mvc.xml
?xml version1.0 encodingutf-8?
androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.ui.activity.MVCActivityandroidx.appcompat.widget.Toolbarandroid:idid/toolbarandroid:layout_widthmatch_parentandroid:layout_height48dpapp:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toTopOfparentandroid:backgroundcolor/material_dynamic_primary90app:titleMVC /EditTextandroid:idid/editandroid:layout_widthmatch_parentandroid:layout_height50dpandroid:layout_marginHorizontal16dpapp:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toBottomOfid/toolbar /TextViewandroid:idid/edit_msgandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop8dpapp:layout_constraintLeft_toLeftOfid/editapp:layout_constraintTop_toBottomOfid/edit /androidx.appcompat.widget.AppCompatButtonandroid:idid/submit_btnandroid:layout_widthmatch_parentandroid:layout_height58dpandroid:layout_marginHorizontal16dpandroid:layout_marginTop8dpandroid:textsubmitandroid:textAllCapsfalseapp:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toBottomOfid/edit_msg /androidx.appcompat.widget.AppCompatButtonandroid:idid/clear_btnandroid:layout_widthmatch_parentandroid:layout_height58dpandroid:layout_marginHorizontal16dpandroid:layout_marginTop8dpandroid:textclearandroid:textAllCapsfalseapp:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toBottomOfid/submit_btn //androidx.constraintlayout.widget.ConstraintLayout 8、源码地址
GitHub - LanSeLianMa/AndroidMVC: Android MVC 写法 9、其他写法
Android MVP 写法-CSDN博客
Android MVVM 写法-CSDN博客