在父Activity中迭代ListView返回null

时间:2013-07-02 14:04:03

标签: android listview android-activity

我有一个列表视图,该列表包含2个项目,一个TextView和一个Button / EditText,基于某些逻辑,如表行中的2列。

现在在布局中,我有listview,我也有一些按钮说保存。当我单击Save时,我应该在Listview所在的Activity中检索Button / EditText的值,并且需要将它们存储在db中。

我无法弄清楚这种情况。可能有很多列表行,比如说有5个列表行,那么需要从0-4位置检索每个值。

请参阅下面的屏幕截图,了解列表视图的外观。

希望你能在那里看到右侧的字段。 COmments旁边是编辑文本,Ship Date旁边是一个按钮。

有人可以帮助我或建议我吗?

enter image description here

更新

我现在正在迭代列表视图,如下所示

    View vr;
    EditText ee;
    for (int i=0;i<=list.getLastVisiblePosition()-list.getFirstVisiblePosition();i++) {
        //vr = list.getChildAt(i);
        vr = list.getAdapter().getView(i, null, null);
        ee = (EditText) vr.findViewById(i);
        System.out.println(ee.getText().toString()); 
    }

在这种情况下,Edittext ee始终为null。我试过取消注释vr = list.getChildAt(i);但它仍然返回null。

根据某些要求,可以在同一个i位置使用Edittext ee或其他按钮。但我不明白为什么ee为空。

在这里提到了答案Iterate through ListView and get EditText-Field values

我想出错的任何想法?

2 个答案:

答案 0 :(得分:0)

您可以通过将按钮/ edittext文本作为列表存储在自定义列表适配器中来完成此操作。可以在EditText视图上添加OnFocusChangeListener或TextWatcher以更新适配器中的列表。以下链接将帮助您入门 EditText in Listview

答案 1 :(得分:0)

我从您的要求中了解到,您希望将列表行上的TexViews的值存储到db。并且你想要点击主要Activity上有“List”的按钮“保存”。

您可以在主要活动

上定义一个ArrayList
List<Integer> listOfDataFromTVsOnList = new ArrayList<Integer>(); 

然后在TextView的Change / Focus监听器上,它是List行的一部分,您可以将TextBox的值分配给我们在Main活动中定义的ArrayList:

((YourMainActivityClass) contextPassedToTheListAdapdter).listOfDataFromTVsOnList.add("Data on the TextView of the Row");

这样,当所有行都完成编辑时(这实际上取决于您的业务逻辑),ArrayList将从List的所有行的TextViews中获得整个数据集。现在点击保存按钮,您可以遍历listOfDataFromTVsOnList并将数据保存为数据库中的单个记录。