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

如何在Activity中动态添加可变数量的TextView与EditText

动态生成对应数量的玩家输入控件解决方案

别担心,完全不用靠新建多个Activity硬编码来解决!核心思路就是动态创建View并添加到布局容器中,下面给你一步步讲清楚具体实现:

1. 先准备布局容器

在当前Activity的布局XML里,添加一个垂直方向的LinearLayout作为动态控件的容器,方便后续往里塞TextView和EditText:

<!-- activity_player_names.xml -->
<LinearLayout
    android:id="@+id/player_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp"
    android:gap="8dp"/>

2. 接收前一个Activity传递的玩家数量

在当前Activity的onCreate方法里,从Intent中取出传递的玩家数量,这里给个默认值防止空异常:

Kotlin 示例:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_player_names)

    // 提取Intent里的玩家数量,默认设为2
    val playerCount = intent.getIntExtra("PLAYER_COUNT", 2)
    
    // 调用方法生成对应数量的输入控件
    generatePlayerInputFields(playerCount)
}

Java 示例:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player_names);

    // 获取玩家数量,默认值设为2
    int playerCount = getIntent().getIntExtra("PLAYER_COUNT", 2);
    
    generatePlayerInputFields(playerCount);
}

3. 动态生成TextView和EditText

写一个循环方法,根据玩家数量创建对应的标签和输入框,设置好样式和布局参数后添加到容器里:

Kotlin 示例:

private fun generatePlayerInputFields(count: Int) {
    val container = findViewById<LinearLayout>(R.id.player_container)
    
    for (i in 1..count) {
        // 创建显示"Player X:"的TextView
        val playerLabel = TextView(this).apply {
            text = "Player $i:"
            textSize = 16f
            setTextColor(ContextCompat.getColor(this@PlayerNamesActivity, android.R.color.black))
        }

        // 创建用于输入名称的EditText
        val playerInput = EditText(this).apply {
            hint = "Enter player name"
            inputType = InputType.TYPE_CLASS_TEXT
            // 生成唯一ID,方便后续获取输入内容
            id = View.generateViewId()
            layoutParams = LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT
            )
        }

        // 把两个控件依次添加到容器中
        container.addView(playerLabel)
        container.addView(playerInput)
    }
}

Java 示例:

private void generatePlayerInputFields(int count) {
    LinearLayout container = findViewById(R.id.player_container);
    
    for (int i = 1; i <= count; i++) {
        // 创建TextView标签
        TextView playerLabel = new TextView(this);
        playerLabel.setText("Player " + i + ":");
        playerLabel.setTextSize(16);
        playerLabel.setTextColor(ContextCompat.getColor(this, android.R.color.black));

        // 创建EditText输入框
        EditText playerInput = new EditText(this);
        playerInput.setHint("Enter player name");
        playerInput.setInputType(InputType.TYPE_CLASS_TEXT);
        playerInput.setId(View.generateViewId()); // 生成唯一ID
        playerInput.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT
        ));

        // 添加到容器
        container.addView(playerLabel);
        container.addView(playerInput);
    }
}

4. 收集所有玩家输入的名称

如果需要获取所有玩家输入的名字,可以遍历容器里的EditText来收集:

Kotlin 示例:

private fun getAllPlayerNames(): List<String> {
    val container = findViewById<LinearLayout>(R.id.player_container)
    val names = mutableListOf<String>()
    
    for (i in 0 until container.childCount) {
        val view = container.getChildAt(i)
        if (view is EditText) {
            names.add(view.text.toString().trim())
        }
    }
    return names
}

Java 示例:

private List<String> getAllPlayerNames() {
    LinearLayout container = findViewById(R.id.player_container);
    List<String> names = new ArrayList<>();
    
    for (int i = 0; i < container.getChildCount(); i++) {
        View view = container.getChildAt(i);
        if (view instanceof EditText) {
            String name = ((EditText) view).getText().toString().trim();
            names.add(name);
        }
    }
    return names;
}

这样就能轻松实现根据玩家数量动态生成输入控件的需求,再也不用硬编码多个Activity啦!

内容的提问来源于stack exchange,提问作者olirwin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:55:20