在上一篇文章中,我們已經完整打造了登入介面的 UI 外觀,從輸入框到按鈕配置,讓行程管家有了一個初步的門面。
然而,只有「外觀」還不夠,真正能夠帶給使用者良好體驗的,還是 背後穩定又靈活的功能實作。
因此,今天我們將正式進入程式碼撰寫的部分,為登入介面加上 互動邏輯,並且透過 MVP 架構 讓程式碼維持乾淨、清晰且容易維護。
以下是我們設計好的 LoginActivity.java 程式碼,這個類別主要承擔了 View 的角色,負責 UI 與使用者互動:
以下是我們設計好的 activity_login.java 程式碼:
ublic class LoginActivity extends AppCompatActivity implements LoginContract.View {
private EditText ed_email, ed_password;
private Button login_btn, register_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_activity_main);
loginPresenter = new LoginPresenter(this);
sdP = new SharedPreferencesHelper(this);
ed_email = findViewById(R.id.login_editTextTextEmailAddress);
ed_password = findViewById(R.id.login_editTextTextPassword);
login_btn = findViewById(R.id.login_button_in);
register_btn = findViewById(R.id.login_button_rest);
login_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String email = ed_email.getText().toString().trim();
String password = ed_password.getText().toString().trim();
if (!email.isEmpty() && !password.isEmpty()) {
loginPresenter.getLogin(email, password);
}
else {
showDialog("請輸入帳號和密碼");
}
}
});
register_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {Intent intent = new Intent();
intent.setClass(LoginActivity.this, RegisterActivity.class);
startActivity(intent);
}
});
}
@Override
public void LoginSuccess() {
sdP.setEmail_key(ed_email.getText().toString());
sdP.setPassword_key(ed_password.getText().toString());
Intent intent = new Intent();
intent.setClass(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
@Override
public void LoginError() {
showDialog("登入失敗");
}
@Override
public void showDialog(String message) {
new AlertDialog.Builder(this)
.setTitle("錯誤")
.setMessage(message)
.setPositiveButton("確定", null)
.show();
}
}