Android Studio:如何跨Activity传递Spinner与EditText的用户输入?
Android跨Activity数据传递解决方案
问题说明
需要将RegisterActivity中以下用户输入传递到ListsActivity:
- EditText:球衣号、身高、体重
- Spinner:性别、年龄、力量、耐力、心肺功能
当前仅能实现Activity跳转,无法传递数据。
步骤1:修改RegisterActivity,添加数据传递逻辑
在RegisterActivity中获取用户输入,通过Intent携带数据完成跳转:
package com.example.fitnessassessmentcell; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; public class RegisterActivity extends AppCompatActivity { // 声明控件引用,避免重复查找 private Button button; private EditText etJersey, etHeight, etWeight; private Spinner spinnerGender, spinnerAge, spinnerStrength, spinnerEndurance, spinnerCardio; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); // 初始化所有控件 button = findViewById(R.id.verify); etJersey = findViewById(R.id.EditTextJerseyNumber); etHeight = findViewById(R.id.EditTextHeightNumber); etWeight = findViewById(R.id.EditTextWeightNumber); spinnerGender = findViewById(R.id.spinner_gender); spinnerAge = findViewById(R.id.spinner_age); spinnerStrength = findViewById(R.id.spinner_strength); spinnerEndurance = findViewById(R.id.spinner_endurance); spinnerCardio = findViewById(R.id.spinner_cardio); // 初始化Spinner适配器(保留原有逻辑) ArrayAdapter<CharSequence> adapterGender = ArrayAdapter.createFromResource(this, R.array.gender, android.R.layout.simple_spinner_item); adapterGender.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerGender.setAdapter(adapterGender); ArrayAdapter<CharSequence> adapterAge = ArrayAdapter.createFromResource(this, R.array.age, android.R.layout.simple_spinner_item); adapterAge.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerAge.setAdapter(adapterAge); ArrayAdapter<CharSequence> adapterStrength = ArrayAdapter.createFromResource(this, R.array.strength, android.R.layout.simple_spinner_item); adapterStrength.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerStrength.setAdapter(adapterStrength); ArrayAdapter<CharSequence> adapterEndurance = ArrayAdapter.createFromResource(this, R.array.endurance, android.R.layout.simple_spinner_item); adapterEndurance.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerEndurance.setAdapter(adapterEndurance); ArrayAdapter<CharSequence> adapterCardio = ArrayAdapter.createFromResource(this, R.array.cardio, android.R.layout.simple_spinner_item); adapterCardio.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerCardio.setAdapter(adapterCardio); // 按钮点击事件:获取数据并传递 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 获取EditText输入内容 String jersey = etJersey.getText().toString().trim(); String height = etHeight.getText().toString().trim(); String weight = etWeight.getText().toString().trim(); // 获取Spinner选中项 String gender = spinnerGender.getSelectedItem().toString(); String age = spinnerAge.getSelectedItem().toString(); String strength = spinnerStrength.getSelectedItem().toString(); String endurance = spinnerEndurance.getSelectedItem().toString(); String cardio = spinnerCardio.getSelectedItem().toString(); // 创建Intent并添加数据 Intent intent = new Intent(RegisterActivity.this, ListsActivity.class); intent.putExtra("KEY_JERSEY", jersey); intent.putExtra("KEY_HEIGHT", height); intent.putExtra("KEY_WEIGHT", weight); intent.putExtra("KEY_GENDER", gender); intent.putExtra("KEY_AGE", age); intent.putExtra("KEY_STRENGTH", strength); intent.putExtra("KEY_ENDURANCE", endurance); intent.putExtra("KEY_CARDIO", cardio); // 启动ListsActivity startActivity(intent); } }); } }
核心要点:
- 将控件引用提升到类级别,减少重复调用
findViewById的开销 - 用
Intent.putExtra(key, value)传递数据,key作为唯一标识,接收时需完全匹配 - Spinner通过
getSelectedItem().toString()获取选中的文本内容
步骤2:修改ListsActivity,接收并使用传递的数据
在ListsActivity中获取Intent携带的数据,可根据需求展示或处理:
package com.example.fitnessassessmentcell; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.widget.Toast; public class ListsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_lists); // 获取启动当前Activity的Intent Intent intent = getIntent(); if (intent != null) { // 通过key取出对应数据 String jersey = intent.getStringExtra("KEY_JERSEY"); String height = intent.getStringExtra("KEY_HEIGHT"); String weight = intent.getStringExtra("KEY_WEIGHT"); String gender = intent.getStringExtra("KEY_GENDER"); String age = intent.getStringExtra("KEY_AGE"); String strength = intent.getStringExtra("KEY_STRENGTH"); String endurance = intent.getStringExtra("KEY_ENDURANCE"); String cardio = intent.getStringExtra("KEY_CARDIO"); // 示例:将数据拼接后用Toast展示 String data = String.format( "球衣号:%s\n身高:%s\n体重:%s\n性别:%s\n年龄:%s\n力量:%s\n耐力:%s\n心肺功能:%s", jersey, height, weight, gender, age, strength, endurance, cardio ); Toast.makeText(this, data, Toast.LENGTH_LONG).show(); // 也可将数据设置到TextView等UI控件,示例: // TextView tvData = findViewById(R.id.tv_data); // tvData.setText(data); } } }
核心要点:
- 用
getIntent()获取启动当前Activity的Intent实例 - 通过
getStringExtra(key)取出对应数据,key必须和传递时一致 - 可根据业务需求将数据展示在UI控件,或进行后续逻辑处理
内容的提问来源于stack exchange,提问作者meowser_code
相关产品推荐
相关产品推荐

