You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:27:16