【问题标题】:Getting text from ListView EditText items?从 ListView EditText 项目中获取文本?
【发布时间】:2014-03-18 21:20:50
【问题描述】:

我使用 EditTexts 和 Spinners 的 ListView 创建了一个表单。

这是因为我必须提供一个“添加新项目”按钮,该按钮将插入更多的 EditText、Spinner 和 TextViews 副本。认为在 ListView 中很容易做到。

考虑ListViews回收Views,如何遍历所有的表单元素?

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    我可以给你一个想法,

    最初在填充列表视图时,您将使用一些 hashmap 的 arraylist 或一些 pojo,而如果您最初只有一行,则只需向该数组列表添加一项并填充列表视图。

    1.对于添加行按钮,提供如下功能,向该数组列表添加一项并通知适配器。

    2.要保存编辑文本数据,在编辑文本的文本更改时,或者如果你有按钮从编辑文本中获取文本,提供如下功能,从你得到的那个位置的 arraylist 获取项目在 getView() 方法中。并使用您当前的数据编辑该项目。

    如果您需要更多澄清,请在您有任何疑问的情况下发表评论。

    【讨论】:

      【解决方案2】:

      由于视图回收,任何时候都只有少数适​​配器视图存在。大约刚好能填满屏幕。因此,它们在任何给定时间只保存您的一部分数据——对它们进行迭代是行不通的。

      唯一的选择是遍历提供视图/适配器数据的对象(例如列表、地图、光标等)。如果这些视图在呈现给用户后被更改(例如存储输入),那么这个输入也必须被缓存;这应该已经设置好了,否则视图回收会导致此输入丢失。

      【讨论】:

        【解决方案3】:

        您的问题将通过以下代码解决: ArrayListarrStr = null;

        对于特定的位置,这将起作用:

         View view=listView.getChildAt(position);
            EditText editText=view.findViewById(R.id.editText);
            String string=editText.getText().toString();
        

        但是当您想获得多个职位时,这将起作用:

        arrStr = new ArrayList<String>();
        for(int i=0;i<items.size();i++){
            View view = listView.getChildAt(i);
            EditText editText = view.findViewById(R.id.editText);
            String str = editText.getText().toString();
            arrStr .add(str);
        
        }
        

        你会从 ArrayList 中的 listView 中获取所有值。

        【讨论】:

          【解决方案4】:

          我最终在 ScrollView 中使用了 ListView。我不希望它回收视图,因为,你需要从每个项目中获取所有数据,而且,它是一个用户表单。通常列表视图将包含 3-4 个项目。我不认为用户会创建这么多项目来导致任何性能问题。

          由于高度为 wrap_contents 的 ListView,在 ScrollView 内会导致它仅显示顶部项目,我不得不在这里使用这个技巧 https://stackoverflow.com/a/19311197/1067596

          【讨论】:

            【解决方案5】:

            尝试创建一个 id,循环创建新项目的次数...例如。命名您的 et_number_1,et_number_2,et_number_3...您可以轻松生成具有

            "et_number_"+i
            

            所以同样,您也可以通过这种方式访问​​相应的 edittext 值来创建您创建的次数。 让我知道它是否有帮助。如果您需要更多说明。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-06-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-09-27
              相关资源
              最近更新 更多