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

Posted

技术标签:

【中文标题】如何从 Android 中每个动态创建的 EditText 获取数据?【英文标题】:How to get data from each dynamically created EditText in Android? 【发布时间】:2011-08-20 21:11:42 【问题描述】:

我已经根据 android 中的用户输入成功创建了 EditTexts,并且我还使用 setId() 方法为它们分配了唯一 ID。

现在我想做的是在用户点击按钮时从动态创建的EditTexts 中获取值,然后将它们全部存储在字符串变量中。即来自 EditText 的具有 id '1' 的值应保存在 String 类型的 str1 中,依此类推,具体取决于 EditText 的数量。

我正在使用getid()gettext().toString() 方法,但这似乎有点棘手......我无法将 EditText 的每个值都分配给 String 变量。当我尝试这样做时,会出现NullPointerException,如果不是没有显示用户输入数据的情况,我会在吐司中显示它。

这里,代码:

EditText ed;

for (int i = 0; i < count; i++)    

        ed = new EditText(Activity2.this);
        ed.setBackgroundResource(R.color.blackOpacity);
        ed.setId(id);   
        ed.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        linear.addView(ed);


我现在如何将每个 EditText 的值传递给每个不同的字符串变量?如果有人可以帮助提供示例代码,那就太好了。

【问题讨论】:

【参考方案1】:

在每次迭代中,您都在重写 ed 变量,因此当循环结束时,ed 仅指向您创建的最后一个 EditText 实例。

您应该存储对所有 EditTexts 的所有引用:

EditText ed;
List<EditText> allEds = new ArrayList<EditText>();

for (int i = 0; i < count; i++)    

    ed = new EditText(Activity2.this);
    allEds.add(ed);
    ed.setBackgroundResource(R.color.blackOpacity);
    ed.setId(id);   
    ed.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
    linear.addView(ed);

现在allEds list 包含对所有 EditTexts 的引用,因此您可以对其进行迭代并获取所有数据。

更新:

根据要求:

String[] strings = new String[](allEds.size());

for(int i=0; i < allEds.size(); i++)
    string[i] = allEds.get(i).getText().toString();

【讨论】:

你能帮我从 allEds 检索值并将其保存到字符串数组吗.. 太棒了(: 非常感谢,但我希望您再次考虑以下语句,因为我在此遇到赋值错误:左侧必须是变量? String[] 字符串 = new String[](allEds.size()); 我的错。应该是`String[] strings = new String[allEds.size()];` @Peter Knego 您的答案已被复制到此处***.com/questions/16102773/… gowtham 我已向版主投诉,请采取必要的步骤。 嘿,你能清楚我们在这里用作 id 的东西吗,我有点困惑。我从 edittext 获取空值。【参考方案2】:

你也可以通过一个 EditText 数组来实现。 您应该存储对所有 EditTexts 的所有引用:

EditText ed[] = new EditText[count];    
for (int i = 0; i < count; i++)    

    ed[i] = new EditText(Activity2.this);

    ed[i].setBackgroundResource(R.color.blackOpacity);
    ed[i].setId(id);   
    ed[i].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
    linear.addView(ed[i]);

您可以使用 for 循环从 EditText 中获取值。

 for(int i = 0; i < ed.length; i++)

       Log.d("Value ","Val " + ed[i].getText());
  

【讨论】:

【参考方案3】:

我有一个 for 循环,在 TableRows 中从 JSON 字符串生成动态 TextView。这是我所做的:

// Generate Dynamic tablerows and set a unique id
//m_jArry is a JSON Array

for(int i = 0; i < m_jArry.length(); i++)

    jo_inside = m_jArry.getJSONObject(i);
    TableRow row = new TableRow(getApplicationContext())
    row.setId(jo_inside.getInt("id"));
    ...        
    findViewById(row.getId())
    ...

我正在使用 findViewById(row.getId()) 将动态 TextView 文本数据设置为我的应用程序中的 EditText 字段。对于那些不了解 JSON 的人,有几个很好的 Android 平台教程(我相信 Stack Overflow 上有很好的解释)。我还是一个 Android 新手,但我希望这对你们中的一些人有所帮助。

【讨论】:

【参考方案4】:
            String[] strings = new String[allEds.size()];
            String[] strings1 = new String[allEdn.size()];

            for(int i=0; i < allEds.size(); i++)
                strings[i] = allEds.get(i).getText().toString();
                strings1[i] = allEdn.get(i).getText().toString();
                System.out.println("data in edittext name is  " +strings[i]);
                System.out.println("data in edittext number is " +strings1[i]);
            

用于多个编辑文本

【讨论】:

【参考方案5】:

这是因为 EditText.gettext() 返回 Editable ,所以 toString 不起作用。 试试 String.valueOf(edittext.gettext) 。

如果你确定你得到了正确的 EditText 但很可能。是 2 如何通过测试到 string den 代码是

    EditText t = new EditText(this);
    t.setText("test");// obviously in ur case it will be intered by user
    String s = String.valueOf(t.getText());
    System.out.println(s);

else use setTeg(Edittext) n 在按钮点击时通过getTag获取editText。

【讨论】:

好吧,shailendra,它是关于edittexts的正确引用..我只从最后引用的edittext中获得价值,你的代码可能会派上用场,呵呵谢谢你的帮助:)

以上是关于如何从 Android 中每个动态创建的 EditText 获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

MFC 中关于Edit控件问题

动态 OnClick 按钮事件

如何从 java/android 中的字符串变量创建字段 ID

如何在 Java Android App 中使用从 Webserver 检索到的 JSON 来动态创建和使用对象

如何从数组动态创建复选框列表?

动态创建的 Firebase 动态链接不适用于 Android