本文展示一個完整的 Android 用戶註冊流程實現,包含主註冊頁面、結果展示頁面、城市下拉選擇、性別單選、密碼確認驗證及 Activity 間數據傳遞等核心功能。採用傳統 XML 佈局 + Java 代碼的開發模式,適合 Android 初學者理解基礎組件交互邏輯。
採用 LinearLayout 垂直佈局,包含以下表單元素:
EditText)RadioGroup 包含「男/女」兩個 RadioButton,默認選中「男」Spinner 下拉選單,數據源來自 arrays.xmlinputType="textPassword" 隱藏明文簡單的垂直佈局,通過 TextView 顯示傳遞過來的註冊信息,包含「返回上一步」按鈕實現頁面跳轉。
<string-array name="ctype">
<item>北京</item>
<item>上海</item>
<item>廣州</item>
<item>杭州</item>
<item>天津</item>
<item>香港</item>
<item>重慶</item>
<item>西安</item>
<item>其他</item>
</string-array>
public class MainActivity extends Activity {
private Button submit;
private String sex1;
private String city;
final int REQUEST_CODE = 0x717;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
submit = findViewById(R.id.submit);
submit.setOnClickListener(v -> {
// 1. 獲取表單數據
String user = ((EditText)findViewById(R.id.user)).getText().toString();
String pwd = ((EditText)findViewById(R.id.pwd)).getText().toString();
String repwd = ((EditText)findViewById(R.id.repwd)).getText().toString();
String email = ((EditText)findViewById(R.id.email)).getText().toString();
// 2. 獲取性別選擇
RadioGroup sexGroup = findViewById(R.id.sex);
for (int i = 0; i < sexGroup.getChildCount(); i++) {
RadioButton rb = (RadioButton) sexGroup.getChildAt(i);
if (rb.isChecked()) {
sex1 = rb.getText().toString();
break;
}
}
// 3. 獲取城市選擇 (設置監聽器)
Spinner spinner = findViewById(R.id.spinner1);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView> parent, View view, int position, long id) {
city = parent.getItemAtPosition(position).toString();
}
@Override
public void onNothingSelected(AdapterView> parent) {}
});
// 4. 表單驗證邏輯
if (TextUtils.isEmpty(user) || TextUtils.isEmpty(pwd) || TextUtils.isEmpty(email)) {
Toast.makeText(this, "請填寫完整註冊信息!", Toast.LENGTH_LONG).show();
return;
}
if (!pwd.equals(repwd)) {
Toast.makeText(this, "兩次密碼不一致,請重新輸入!", Toast.LENGTH_LONG).show();
clearPasswordFields();
return;
}
// 5. 跳轉至結果頁並傳遞數據
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
Bundle bundle = new Bundle();
bundle.putString("user", user);
bundle.putString("sex", sex1);
bundle.putString("city", city);
bundle.putString("pwd", pwd);
bundle.putString("email", email);
intent.putExtras(bundle);
startActivityForResult(intent, REQUEST_CODE);
});
}
private void clearPasswordFields() {
EditText pwdEt = findViewById(R.id.pwd);
EditText repwdEt = findViewById(R.id.repwd);
pwdEt.setText("");
repwdEt.setText("");
pwdEt.requestFocus();
}
}
public class RegisterActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
Bundle bundle = getIntent().getExtras();
// 設置顯示文本
((TextView)findViewById(R.id.user)).setText("用戶名:" + bundle.getString("user"));
((TextView)findViewById(R.id.sex)).setText("性別:" + bundle.getString("sex"));
((TextView)findViewById(R.id.city)).setText("城市:" + bundle.getString("city"));
((TextView)findViewById(R.id.pwd)).setText("密碼:" + bundle.getString("pwd"));
((TextView)findViewById(R.id.email)).setText("E-mail:" + bundle.getString("email"));
// 返回按鈕邏輯
findViewById(R.id.back).setOnClickListener(v -> {
setResult(RESULT_OK, getIntent());
finish();
});
}
}
| 技術點 | 實現方式 |
|---|---|
| 頁面跳轉與回傳 | startActivityForResult + setResult + finish() |
| 數據傳遞 | Bundle 封裝基本類型數據 |
| 下拉選單 | Spinner + ArrayAdapter (XML 靜態數據) |
| 單選組 | RadioGroup 管理 RadioButton 互斥選擇 |
| 密碼隱藏 | android:inputType="textPassword" |
| 表單驗證 | 非空檢查 + 密碼一致性比對 + Toast 提示 |
findViewById,減少樣板代碼TextInputLayout 實現浮動標籤、錯誤提示等現代 UI這個註冊頁面示例涵蓋了 Android 基礎開發的核心知識點:佈局構建、組件交互、數據傳遞、生命周期管理。雖然採用傳統 Java 實現,但邏輯清晰、功能完整,是理解 Android 四大組件協作的優秀入門案例。實際項目中建議採用現代架構組件提升開發效率與代碼質量。