Java 如何向listview动态添加项
我正在尝试在android studio中创建一个android应用程序,允许我在运行时将项目添加到我的listView中。我有一个用于添加预定义项的代码,但当我修改它以添加一个项时,每当我按下“添加”按钮时,我都会添加第一个项,但当我尝试在之后添加更多项时,所有其他项都与第一个项相同 每个项目都有一个产品id和一个数量,其中当我的应用程序barcodescanner扫描一个产品时,Java 如何向listview动态添加项,java,android,android-listview,android-arrayadapter,listview-adapter,Java,Android,Android Listview,Android Arrayadapter,Listview Adapter,我正在尝试在android studio中创建一个android应用程序,允许我在运行时将项目添加到我的listView中。我有一个用于添加预定义项的代码,但当我修改它以添加一个项时,每当我按下“添加”按钮时,我都会添加第一个项,但当我尝试在之后添加更多项时,所有其他项都与第一个项相同 每个项目都有一个产品id和一个数量,其中当我的应用程序barcodescanner扫描一个产品时,idText被设置,然后我通过在editText小部件中指定一个值来设置amountText,然后按下Add按钮来
idText
被设置,然后我通过在editText小部件中指定一个值来设置amountText
,然后按下Add按钮来创建一个具有这些值的项目。当我使用它时,第一个结果应该是这样的:
778216562 12
但当我添加另一个项目时,以前的所有项目都会变成新项目:
589095564 15
589095564 15
这是用于将项目添加到我的listView的代码。当我按下应用程序上的add按钮时,会调用addItem()
方法,并且listItem
声明如下listItems=new ArrayList()代码>:
是否有人知道如何更改此代码,以便我可以在不更改前一个代码的情况下继续添加项目,同时,我无法添加与前一个产品id相同但数量不同的项目,是否有人知道如何解决此问题 您的第一个问题是因为Java处理可变数据类型的方式。由于resultsMap
是一个全局变量,当您使用相同的键值调用put()
(即“idForID”
和“idForAmount”
)时,您将覆盖这些键的最后一个输入。参考listItems
仍然指向现在包含覆盖数据的resultsMap
对象,给您留下了同一对象的多个副本
此问题的一个简单解决方案是将resultsMap
对象的声明移动到addItem()
函数中(使其成为局部变量)。尽管考虑到嵌套在列表
中的映射
不必要地增加了复杂性,我还是建议不要使用这种解决方案
相反,解决第二个问题的解决方案是创建一个类来包含数据
final class Product(String id, String amount) {
public final String id;
public final String amount;
public Product(String id, String amount) {
this.id = id;
this.amount = amount;
}
/**
* Override equals() and hashCode() as well.
* These can be generated in Android Studio by selecting
* Code > Generate… > equals() and hashCode().
*/
}
然后使用此对象作为列表和适配器的类型,而不是Map
,并确保每次向列表中添加项目时都创建一个新对象。这将允许您创建一个包含任意数量项目的列表
,即使它们具有相同的id
正如@Raza所建议的,我还建议从ListView
切换到RecyclerView
。如文件中所述
<强>注:如果您考虑使用ListVIEW使用数组适配器,请考虑使用CurryReVIEW。提供类似的服务
比ListView具有更好的性能和更大的灵活性的功能
提供。请参阅指南
每次调用addItem()
时,您似乎都在不断创建和设置新适配器。尝试将您的SimpleAdapter
和您的productsView.setAdapter
移动到您的onCreate()
方法。为什么不使用RecycleService我已经尝试将SimpleAdapter和productsView.setAdapter移动到onCreate(),但同样的情况仍然发生。我以前没有听说过recyclerview,但我可以试着查找它。我按照建议做了,制作了一个产品类,并使用recyclerview而不是listView。现在它工作得很好!非常感谢您的帮助!
final class Product(String id, String amount) {
public final String id;
public final String amount;
public Product(String id, String amount) {
this.id = id;
this.amount = amount;
}
/**
* Override equals() and hashCode() as well.
* These can be generated in Android Studio by selecting
* Code > Generate… > equals() and hashCode().
*/
}