我有一个列表视图,该列表包含2个项目,一个TextView和一个Button / EditText,基于某些逻辑,如表行中的2列。
现在在布局中,我有listview,我也有一些按钮说保存。当我单击Save时,我应该在Listview所在的Activity中检索Button / EditText的值,并且需要将它们存储在db中。
我无法弄清楚这种情况。可能有很多列表行,比如说有5个列表行,那么需要从0-4位置检索每个值。
请参阅下面的屏幕截图,了解列表视图的外观。
希望你能在那里看到右侧的字段。 COmments旁边是编辑文本,Ship Date旁边是一个按钮。
有人可以帮助我或建议我吗?
更新
我现在正在迭代列表视图,如下所示
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。
我想出错的任何想法?
答案 0 :(得分:0)
您可以通过将按钮/ edittext文本作为列表存储在自定义列表适配器中来完成此操作。可以在EditText视图上添加OnFocusChangeListener或TextWatcher以更新适配器中的列表。以下链接将帮助您入门 EditText in Listview
答案 1 :(得分:0)
我从您的要求中了解到,您希望将列表行上的TexViews的值存储到db。并且你想要点击主要Activity上有“List”的按钮“保存”。
您可以在主要活动
上定义一个ArrayListList<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并将数据保存为数据库中的单个记录。