如何为当前点击的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
相关产品推荐
相关产品推荐

