源码地址:https://github.com/ldy1993/ToolforAS.git
MVC框架
- Model(模型)表示应用程序核心(比如数据库记录列表)。
- View(视图)显示数据(数据库记录)。
- Controller(控制器)处理输入(写入数据库记录)
我们先新建一个这样目录结构
在controller中创建一个抽象类的controller
控制器往往就是,开始--执行--结束流程
/**
* Controller 抽象类定义
*
* @author ldy
*
*/
public abstract class AController {
/**
* 子类构造方法必须调用super设置ActionStartListener
* @param listener {@link ControllerStartListener}
*/
public AController(ControllerStartListener listener) {
this.startListener = listener;
}
/**
* Controller结束监听器
* @author ldy
*/
private ControllerStartListener startListener;
public interface ControllerStartListener {
void onStart(AController controller);
}
/**
* Controller结束监听器
* @author ldy
*/
private ControllerEndListener endListener;
public interface ControllerEndListener {
void onEnd(AController controller, ControllerResult result);
}
public void setEndListener(ControllerEndListener listener) {
this.endListener = listener;
}
/**
* Controller的具体处理方法
*/
protected abstract void process();
/**
* 执行Controller之前需要先设置{@link ControllerEndListener},
* 此接口内部先调用{@link ControllerStartListener#onStart(AController)} ,
* 再调用{@link AController#process}
*/
public void execute() {
if (startListener != null) {
startListener.onStart(this);
}
process();
}
/**
* 设置Controller结果, 次接口内部调用{@link ControllerEndListener#onEnd(AController, ControllerResult)}方法
* @param result {@link ControllerResult}
*/
public void setResult(ControllerResult result) {
if (endListener != null) {
endListener.onEnd(this, result);
}
}
}
然后我们创建他的实例。比如我现在有个需求功能,需要展示sdcard列表,可以选择中一个文件,然后这个文件会返回名称给调用者。
如下
然后在model中创建ControllerResult 用存储结果数据
public class ControllerResult {
/**
* 返回结果(为 -1000 时显示detailMessage)
*/
int ret;
/**
* 返回数据
*/
Object data;
/** 返回结果详细信息(一般为服务器响应后抛出的异常信息,显示时以服务器给的信息为准) **/
String detailMessage;
public ControllerResult(int ret, Object data, String message) {
this.ret = ret;
this.data = data;
this.detailMessage = message;
}
}
然后我们就可以在view中进行调用。
@MenuActivity(menu = MenuEnum.常用框架主菜单,sonMenu = SonMenuEnum.MVC框架)
public class MVCActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mvc);
ControllerListSdcard controllerListSdcard=new ControllerListSdcard(new AController.ControllerStartListener() {
@Override
public void onStart(AController controller) {
}
});
controllerListSdcard.setEndListener(new AController.ControllerEndListener() {
@Override
public void onEnd(AController controller, ControllerResult result) {
}
});
controllerListSdcard.execute();
}
}
目录结构变成