Android应用开发:如何保存输入名称并在其他Activity生成对应Checkbox
实现Android中输入名称保存并动态生成Checkbox的方案
嘿,这个需求其实挺直观的,咱们分两步来搞定:先做输入保存的页面,再做动态生成Checkbox的页面,我给你详细说说具体实现:
第一步:创建输入名称并保存的Activity
首先咱们先搞定第一个页面,让用户能输入名称并保存下来。这里推荐用SharedPreferences来持久化存储,这样即使App重启,保存的名称也不会丢失。
1. 布局文件(activity_input.xml)
先写个简单的布局,包含输入框和保存按钮:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入名称" /> <Button android:id="@+id/btn_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保存名称" android:layout_marginTop="16dp" /> <Button android:id="@+id/btn_go_to_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="查看Checkbox列表" android:layout_marginTop="8dp" /> </LinearLayout>
2. 逻辑代码(InputActivity.kt)
在Activity里处理保存逻辑,把输入的名称存入SharedPreferences的集合中:
import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import android.widget.Button import android.widget.EditText import androidx.appcompat.app.AppCompatActivity class InputActivity : AppCompatActivity() { private lateinit var sharedPref: SharedPreferences private val NAME_SET_KEY = "saved_names" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_input) sharedPref = getSharedPreferences("NameStorage", MODE_PRIVATE) val etName = findViewById<EditText>(R.id.et_name) val btnSave = findViewById<Button>(R.id.btn_save) val btnGoToCheckbox = findViewById<Button>(R.id.btn_go_to_checkbox) btnSave.setOnClickListener { val inputName = etName.text.toString().trim() if (inputName.isNotEmpty()) { // 获取已保存的名称集合 val savedNames = sharedPref.getStringSet(NAME_SET_KEY, mutableSetOf())?.toMutableSet() ?: mutableSetOf() savedNames.add(inputName) // 保存更新后的集合 sharedPref.edit().putStringSet(NAME_SET_KEY, savedNames).apply() etName.text.clear() // 清空输入框 } } btnGoToCheckbox.setOnClickListener { startActivity(Intent(this, CheckboxActivity::class.java)) } } }
第二步:创建动态生成Checkbox的Activity
接下来咱们做第二个页面,读取保存的名称,然后逐个生成Checkbox并添加到布局里。
1. 布局文件(activity_checkbox.xml)
只需要一个容器(比如LinearLayout)来承载动态生成的Checkbox:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll_checkbox_container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> </LinearLayout>
2. 逻辑代码(CheckboxActivity.kt)
读取SharedPreferences里的名称集合,循环创建Checkbox并添加到容器中:
import android.content.SharedPreferences import android.os.Bundle import android.widget.CheckBox import android.widget.LinearLayout import androidx.appcompat.app.AppCompatActivity class CheckboxActivity : AppCompatActivity() { private lateinit var sharedPref: SharedPreferences private val NAME_SET_KEY = "saved_names" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_checkbox) sharedPref = getSharedPreferences("NameStorage", MODE_PRIVATE) val checkboxContainer = findViewById<LinearLayout>(R.id.ll_checkbox_container) // 获取保存的名称集合 val savedNames = sharedPref.getStringSet(NAME_SET_KEY, emptySet()) ?: emptySet() // 循环生成Checkbox savedNames.forEach { name -> val checkBox = CheckBox(this).apply { text = name layoutParams = LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT ).apply { bottomMargin = 8dp // 设置每个Checkbox的底部间距 } } checkboxContainer.addView(checkBox) } } }
额外注意点
- 如果不需要持久化存储(比如只是临时跳转传递数据),可以用
Intent的putStringArrayListExtra方法传递名称列表,第二个Activity直接从Intent中读取即可。 - 上面的代码用Set存储已经自动实现了去重,要是需要自定义去重逻辑可以再调整。
- 别忘了在
AndroidManifest.xml中注册这两个Activity哦!
内容的提问来源于stack exchange,提问作者Praveen Deshpande
相关产品推荐
相关产品推荐

