- [ MVPBuilder Github 下载地址]
该篇所做的事情是建立一个BaseActivity,和建立一个MainActivity。看看现在的目录结构,为了不影响初学者,我把这篇不关注的文件都先画了横线。
可以看到我们正式在View和Presenter目录下开始写东西了。首先我们要定位我们今天要写什么功能,再思考这个功能怎么写?
功能描述:
在MainActivity中编写一个按钮,作为APP的入口Activity,我想在这里编写一系列的按钮,点击按钮会跳转到相应的demo功能展示(这点nohttp的例子就做得很好)
接口IActivity
该工程所有Activity类都要实现的接口,接口里面有2个方法,初始化视图,初始化数据。
public interface IActivity {
void initView();//对界面元素的初始化,findviewbyid
void initData();//对界面数据的初始化
}
视图基类BaseActivity
创建视图基类BaseActivity,基类可以做一些基本的操作,例如进入页面前先判断用户是否合法,Token有没有过期,或者封装一些输出界面的方法,例如吐司等,按需添加。工程必须要有基类,试想一下以下场景,你编写了100个Activity,然后测试的时候发现有些页面总是莫名其妙的报错,最后发现是页面没有特意去获取用户的合法密钥(Token),好吧,要补充一个先判断该用户是否合法的功能然后才显示页面。
1. 如果没有基类,你写1次加复制粘贴99次的工作量。
2. 如果有基类,你可以直接在基类里面写这个判断
public class BaseActivity extends AppCompatActivity implements IActivity,View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
initView();
initData();
}
@Override
public void initView() {
}
@Override
public void initData() {
}
@Override
public void onClick(View v) {
}
}
BaseActivity现在实现了View.OnClickListener和IActivity,也就是说我工程里所有Activity都至少有这3个方法,初始化界面,初始化数据,页面点击响应。
接口IMainActivity
public interface IMainActivity extends IActivity{
void gotoLoginExample();
}
MainActivity
public class MainActivity extends BaseActivity implements IMainActivity{
Button btnLogin;
MainP mainP;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void gotoLoginExample() {
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
}
@Override
public void initView() {
btnLogin = (Button)findViewById(R.id.loginBtn);
}
@Override
public void initData() {
}
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()){
case R.id.loginBtn:
mainP.gotoLogin();
break;
default:
break;
}
}
}
MainP
public class MainP implements IMain{
IMainActivity view;
@Override
public void gotoLogin() {
view.gotoLoginExample();
}
}