大话Philm的从无到有(二)满月篇
来源:互联网 发布:php新闻发布系统教程 编辑:程序博客网 时间:2024/04/28 07:44
在版本号962e435中,Philm已见雏形,让我们来看看这个版本中都有什么变化
Controller的变化
- MoviewController 扩展了MoviewController, 在里面有了实际的逻辑业务,通过FetchLibraryRunnable来获得Movie的Library。FetchLibraryRunnable继承自BackgroundRunnable
public abstract class BackgroundRunnable<R> implements Runnable { private static final Handler sHandler = new Handler(Looper.getMainLooper()); @Override public final void run() { Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); final R result = runAsync(); sHandler.post(new Runnable() { @Override public void run() { postExecute(result); } }); } public abstract R runAsync(); public void postExecute(R result) { }}
BackgroundRunnable中实现了Run方法,首先执行runAsync函数执行任务,再通过MainHandler在在Ui线程中执行postExecute函数(其实也可以用AsyncTask来实现也未尝不可)
- UserController : 新增加了UserConroller类,里面实现了用户登陆相关的业务逻辑,一个电影类应用,怎么能没有用户的概念呢
public class UserController extends BaseUiController<UserController.UserUi, UserController.UserUiCallbacks> { public interface UserUi extends BaseUiController.Ui<UserUiCallbacks> { } public interface UserUiCallbacks { void login(String username, String password); } public interface UserControllerProvider { UserController getUserController(); } private final UserState mUserState; private final Display mDisplay; public UserController(Display display, UserState userState) { super(); mDisplay = Preconditions.checkNotNull(display, "display cannot be null"); mUserState = Preconditions.checkNotNull(userState, "userState cannot be null"); } @Override protected void onInited() { super.onInited(); mUserState.registerForEvents(this); } private boolean validCredentials() { return !TextUtils.isEmpty(mUserState.getUsername()) && !TextUtils.isEmpty(mUserState.getHashedPassword()); } @Override protected void onSuspended() { super.onSuspended(); mUserState.unregisterForEvents(this); } void doLogin(String username, String password) { // TODO: Hash password } @Override protected UserUiCallbacks createUiCallbacks() { return new UserUiCallbacks() { @Override public void login(String username, String password) { doLogin(username, password); } }; }}
- 接口UserUiCallbacks是在UserController中定义和实现,在View中调用,来完成用户的Login过程的,其最终是调用的UserController函数中的doLogin函数来完成Login过程的
接口UserControllerProvider,将会被Activity实现,给Fragment提供UserController接口,同样的在MovieController也实现了类似的函数
- MainController
MainController新增的Conroller,用来包裹MovieController和UserController,以后肯定也有其他的Controller要被放到MainController中。
- MainController
State的变化
- 新增了UserState :继承自BaseState,同样是一个接口类,提供几个和用户Model相关的函数,将会在ApplicationState中实现
- 变更了MovieState :只是函数名称的变更,略去
变更了ApplicationState:ApplicationState实现了BaseState、MovieState和UserState,在整体中相当于Model,其变量mLibrary、mUsername和mHashedPassword分别起到持久化数据的作用,保存实例对象的作用。其在PhilmActivity实例化的对象会在MovieController和UserController的构造函数实例化时,作为参数传入,每个Controller只用其对应的State提供的函数接口
Display(新增)
public class Display { private final Activity mActivity; public Display(Activity activity) { mActivity = Preconditions.checkNotNull(activity, "activity cannot be null"); } public void showLibrary() { CollectionListFragment fragment = new CollectionListFragment(); mActivity.getFragmentManager().beginTransaction() .replace(R.id.fragment_main, fragment) .commit(); } public void showLogin() { LoginFragment fragment = new LoginFragment(); mActivity.getFragmentManager().beginTransaction() .replace(R.id.fragment_main, fragment) .commit(); }}
从代码中可以看出来,它是起到了控制Fragment在Activity中显示的作用,PhilmActivity的Layout文件中有一个Fragment,被有功能性的Fragment不断地进行替换。一个Activity就可以实现View的所有功能。
另外还新增了一个MovieGridAdapter,这个肯定是Movie视图的Adapter,目前实现很简单。
借用别人的一张图说明这几个模块在整个程序中的关系
0 0
- 大话Philm的从无到有(二)满月篇
- 大话Philm的从无到有(一)诞生篇
- 致 满月的婚姻
- 计算满月的时间
- 豆豆满月了[图](二)
- 满月
- 满月
- 大话分页(二)
- Philm.MVP 实践——UI篇
- 《大话数据结构》读书笔记(二)
- 大话设计模式(二)
- 大话设计模式(二)
- 大话实时计算(二)
- 《大话数据结构》读书笔记(二)
- 大话数据结构(二)线性表的基本知识点
- 从无到有,质的变化
- 一个App的从无到有
- view从无到有的过程
- 黑马程序员---java高新技术----反射技术
- boost asio网络编程
- 浅淡java类加载机制
- iOS 蓝牙开发(二)iOS 连接外设的代码实现
- Oracle实例和Oracle数据库(Oracle体系结构)
- 大话Philm的从无到有(二)满月篇
- [Cocos2d-x 升级IOS9错误解决方案]Unexpected CFBundleExecutable Key.The bundle atXXXX
- 我必须改变2
- haskell读写文件相关(含二进制)
- mybatis整合Mapper通用工具,实现单表基本操作
- [思路+组合数] hdu 3398 String
- Android实战简易教程<四十八>(App引导页面效果实现)
- 解决 maven 工程导入 eclipse 后的问题
- MFC tab控件不同页面间的变量传递和函数调用