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

如何为当前点击的EditText设置AlertDialog选中的列表项文本,避免赋值到其他EditText

问题根因

你代码中全局声明的EditText editText成员变量,每次调用addView()新增行时都会被覆盖为最新创建的EditText实例,所以无论你点击哪个EditText触发弹窗,最终弹窗确认后都会把值设置到最后一次创建的EditText上,这就是问题的来源。

修复方案

不需要用全局变量存储点击的EditText,在触发弹窗时直接把当前点击的EditText实例传递给弹窗方法即可,修改后代码如下:

public class MainActivity2 extends AppCompatActivity
{
    LinearLayout parent_linear_layout;
    String value;
    Button add;

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

        parent_linear_layout = findViewById(R.id.parent_linear_layout);
        add = findViewById(R.id.button_add);

        add.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                addView();
            }
        });
    }

    private void addView()
    {
        View view = getLayoutInflater().inflate(R.layout.row_add_language2, null, false);
        parent_linear_layout.addView(view);
        // 改为局部变量存储当前创建的EditText
        EditText currentEditText = view.findViewById(R.id.et_name2);
        currentEditText.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                // 把当前点击的EditText传入弹窗方法
                simpleDialog((EditText) view);
            }
        });
    }

    // 方法新增EditText参数接收目标输入框
    public void simpleDialog(EditText targetEditText)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Select names");
        String[] array = getResources().getStringArray(R.array.language);
        builder.setSingleChoiceItems(array, -1, new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialogInterface, int i)
            {
                value = array[i];
            }
        });
        builder.setPositiveButton("Add", new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialogInterface, int i)
            {
                // 直接给传入的目标输入框设值
                targetEditText.setText(value);
            }
        });
        builder.create().show();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 01:27:03