如何在android中动态添加edittext?

Posted

技术标签:

【中文标题】如何在android中动态添加edittext?【英文标题】:How to add edittext dynamically in android? 【发布时间】:2021-01-28 13:20:03 【问题描述】:

如何在adapter中动态添加edittext?

我有一个适配器,我正在创建edittext供用户动态输入数据。

我将从服务器接收到的 Json 创建的所有编辑文本存储在一个列表中。 现在我什至必须为用户提供额外的编辑文本以在按钮单击时添加动态/自定义数据?

我该怎么做?

    ArrayList<EditText> list = new ArrayList<>();
    list.add(holder.editText);

我将首先使用这样的警告框从用户那里获取编辑文本的标题/提示:

addField.setOnClickListener(new View.OnClickListener()
    
        @Override
        public void onClick(View v)
        
            final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context, R.style.AlertDialogStyle);
            alertDialog.setMessage("");


            final EditText input = new EditText(context);
            input.setGravity(Gravity.CENTER);
            input.setHint("Enter Title for custom field");

            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT);
            input.setLayoutParams(lp);
            alertDialog.setView(input);
            alertDialog.setIcon(R.drawable.logo);

            alertDialog.setPositiveButton("Set",
                    new DialogInterface.OnClickListener()
                    
                        public void onClick(DialogInterface dialog, int which)
                        
                            list.add(holder.editText); //**App Crashes while doing this**
                        
                    );

            alertDialog.setCancelable(false).show();
        
    );

edittext 未添加到列表中,应用程序在单击 alertBox 的 SET 时崩溃

【问题讨论】:

【参考方案1】:

我认为您必须至少提供一个 editText 以便在 XML 中获得焦点。然后在java中,您可以创建editTexts并以编程方式添加参数等。此源代码对我有用:

EditText editText = new EditText(context);
            editText.setLayoutParams(layoutParamsForEdittext);
            editText.setBackground(context.getResources().getDrawable(R.drawable.bg_rounded_grey_border));
            editText.setId(surveyAnswers.getId());
            editText.setPadding(8, 8, 8, 8);
            editText.setScrollContainer(true);
            editText.setTextSize(16);
            editText.setInputType(InputType.TYPE_CLASS_NUMBER);
            editText.setFilters(new InputFilter[]filter, new InputFilter.LengthFilter(10));
            editText.setGravity(Gravity.TOP);
            editText.setHintTextColor(context.getResources().getColor(R.color.colorTextHint));
            editText.setHint(surveyAnswers.getText());
          
            linearLayoutShelfShareAnswer.addView(editText);

【讨论】:

适配器 xml 中的新编辑文本正确吗? linearLayoutShelfShareAnswer 是什么? @Test 我是在我的 ViewHolder 类中完成的。我以编程方式创建了新的 EditText 和 linearLayoutShelfShareAnswer.addView(editText);这里我只是简单地将我的新editText 添加到LinearLayout。 linearLayoutShelfShareAnswer 是我的 LinearLayout

以上是关于如何在android中动态添加edittext?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android 的布局中删除 Edittext?

如何在android中动态增加EditText的大小?

如何在 android 中动态更改 EditText 小部件的文本大小?

如何指向在 Android 的 ListView 中动态生成的 EditText 元素?

如何从 Android 中每个动态创建的 EditText 获取数据?

如何在Android中设置EditText的最大字符数?