天天看點

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();
    }
}