天天看点

Android MVPBuilder第二篇

- [ MVPBuilder Github 下载地址]

该篇所做的事情是建立一个BaseActivity,和建立一个MainActivity。看看现在的目录结构,为了不影响初学者,我把这篇不关注的文件都先画了横线。

Android MVPBuilder第二篇

可以看到我们正式在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();
    }
}