【问题标题】:How to get data from each dynamically created EditText in Android?如何从 Android 中每个动态创建的 EditText 获取数据?
【发布时间】: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 的值传递给每个不同的字符串变量?如果有人可以帮助提供示例代码,那就太好了。

【问题讨论】:

    标签: java android string android-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 您的答案已被复制到此处stackoverflow.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中获得价值,你的代码可能会派上用场,呵呵谢谢你的帮助:)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-01-18
          • 1970-01-01
          • 2018-05-26
          • 1970-01-01
          • 1970-01-01
          • 2015-05-23
          相关资源
          最近更新 更多