Android - 自定义ListView中的TextView在滚动

时间:2016-05-13 09:44:53

标签: java android listview

我经常遇到这些类型的问题,但没有一个答案解决了我的问题。

我正在开发移动购物应用程序模型。我的自定义ListView包含ImageViewEditText(数量),2 Buttons用于增加和减少数量,3 TextView s用于商品名称和其他两个价格和我通过Java代码根据需求动态加载NetWeights的许多按钮,我使用扩展BaseAdapter和getView()的CustomAdapter(类)实现它。

问题1:

当我使用条件if(convertView==null), setTag(holder)getTag()时,动态加载的按钮会重复并且数量会翻倍。

问题2:

在滚动自定义ListView时,我在TextView中的2个上丢失了我的数据,而另一个TextView(名称)正常,因为在TextView我不知道#39; t在运行时更改数据。在另外两个TextView s(价格)上,我使用ButtonClicks(增加和减少)更改运行时的数据,当我滚动两个TextView时,它会丢失其内容。实际上我对EditText(显示数量)有同样的问题,我通过获取值并将其传递到数组并再次设置它,使用TextWatcher解决了它。我使用相同的技术(即)TextWatcherTextView但这确实有帮助。我还尝试删除TextWatcher并使用数组设置文本并添加TextWatcher。我仍然在那些TextView s

中丢失了我的内容

任何建议??????

1 个答案:

答案 0 :(得分:0)

问题1: 在使用ViewHolder(setTag(),getTag())时,我们将重用视图。 例如:假设我们有10个listview项目,屏幕一次可以显示3个项目。让我们说我们添加2个按钮来列出项目1.第一次加载列表视图时,我们将看到两个按钮。让我们说现在我们向下滚动并再次回到列表项1,因为我们正在重用视图,我们已经有2个按钮,如果我们有代码使用getTag()添加按钮,那么将添加2个按钮。我认为这可能导致按钮重复的问题。要添加更多信息,列表项1,列表项4,列表项7和列表项10将全部使用相同的视图,因为此示例中的屏幕只能显示3个项目。

问题2: 一种想法是将所有这些文本值存储在arrayList中。 例如,假设我们在每个列表项中都有一个textView,可以递增/递减。在此textView上设置textWatcher,每当文本更改时,使用“position”作为索引将其添加到arrrayList。当你执行getTag()时,在getView方法内部尝试使用以前存储的文本(存储在arrayList中)来设置textView。