大话Philm的从无到有(二)满月篇

在版本号962e435中,Philm已见雏形,让我们来看看这个版本中都有什么变化

Controller的变化

  1. 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来实现也未尝不可)

  1. 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也实现了类似的函数

    1. MainController
      MainController新增的Conroller,用来包裹MovieController和UserController,以后肯定也有其他的Controller要被放到MainController中。

State的变化

  1. 新增了UserState :继承自BaseState,同样是一个接口类,提供几个和用户Model相关的函数,将会在ApplicationState中实现
  2. 变更了MovieState :只是函数名称的变更,略去
  3. 变更了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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值