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