首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Android 註冊頁面開發實戰:城市選擇與表單驗證完整實現

     編輯:Java 相關知識

項目概覽

本文展示一個完整的 Android 用戶註冊流程實現,包含主註冊頁面、結果展示頁面、城市下拉選擇、性別單選、密碼確認驗證及 Activity 間數據傳遞等核心功能。採用傳統 XML 佈局 + Java 代碼的開發模式,適合 Android 初學者理解基礎組件交互邏輯。

核心功能模塊

1. 主註冊頁面佈局 (activity_main.xml)

採用 LinearLayout 垂直佈局,包含以下表單元素:

  • 用戶名輸入框 (EditText)
  • 性別選擇:RadioGroup 包含「男/女」兩個 RadioButton,默認選中「男」
  • 城市選擇:Spinner 下拉選單,數據源來自 arrays.xml
  • 密碼與確認密碼:inputType="textPassword" 隱藏明文
  • Email 輸入框
  • 提交按鈕

2. 結果展示頁面佈局 (register.xml)

簡單的垂直佈局,通過 TextView 顯示傳遞過來的註冊信息,包含「返回上一步」按鈕實現頁面跳轉。

3. 城市數據源 (arrays.xml)

<string-array name="ctype">
  <item>北京</item>
  <item>上海</item>
  <item>廣州</item>
  <item>杭州</item>
  <item>天津</item>
  <item>香港</item>
  <item>重慶</item>
  <item>西安</item>
  <item>其他</item>
</string-array>

關鍵業務邏輯實現

MainActivity.java - 註冊邏輯與驗證

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

RegisterActivity.java - 結果展示與返回

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 提示

優化建議與現代化替代方案

  • ViewBinding/DataBinding:替代 findViewById,減少樣板代碼
  • Material Components:使用 TextInputLayout 實現浮動標籤、錯誤提示等現代 UI
  • LiveData + ViewModel:分離 UI 與業務邏輯,應對配置變更
  • RecyclerView + DialogFragment:替代 Spinner 實現更豐富的城市選擇體驗(搜索、分組、多選)
  • Kotlin + 協程:簡化異步邏輯,代碼更簡潔安全

總結

這個註冊頁面示例涵蓋了 Android 基礎開發的核心知識點:佈局構建、組件交互、數據傳遞、生命周期管理。雖然採用傳統 Java 實現,但邏輯清晰、功能完整,是理解 Android 四大組件協作的優秀入門案例。實際項目中建議採用現代架構組件提升開發效率與代碼質量。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved