如何解决使用循环将 arrayList 添加到 HashMap [kotlin 代码]
我正在尝试将 itemList 作为从其他函数获取的数组,并将其放入哈希映射中。循环结束后,我尝试打印错误的内容。
class ExpandableItemClass : AppCompatActivity() {
private var expandablelistadapter: ExpandableListViewAdapter? = null
private lateinit var titleList : List<String>
private lateinit var myHasMap: HashMap<String,List<String>>
private var itemList : ArrayList<String> ? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_pobitrota)
titleList = ArrayList()
myHasMap = HashMap()
itemList = ArrayList()
getAllTitles()
expandablelistadapter = ExpandableListViewAdapter(this@PobitrotaActivity,titleList,myHasMap)
pobitrota_recyclerListView.setAdapter(expandablelistadapter)
}
private fun getAllTitles() {
var pRef = FirebaseDatabase.getInstance().reference.child("Titles")
pRef.addValueEventListener(object : ValueEventListener{
override fun onCancelled(error: DatabaseError) {
}
override fun onDataChange(snapshot: DataSnapshot) {
if(snapshot.exists()){
(chapterList as ArrayList<String>).clear()
for (item in snapshot.children){
var subItem = item.getValue(Title::class.java)
if(subItem!!.getMainTitleId().equals("-M_FyZJbyXf3fLFyEuiT")){
(titleList as ArrayList<String>).add(subItem.getTitleName())
getAllItems(item.key!!)
}
}
}
}
})
}
private fun getAllItems(titleId: String) {
var pRef = FirebaseDatabase.getInstance().reference.child("DropdownItems")
pRef.addValueEventListener(object : ValueEventListener{
override fun onCancelled(error: DatabaseError) {
}
override fun onDataChange(snapshot: DataSnapshot) {
if(snapshot.exists()){
dropdownList!!.clear()
for (item in snapshot.children){
var stdItem = item.getValue(Item::class.java)
if(stdItem!!.getTitleId().equals(titleId)){
itemList!!.add(stdItem.getItemName())
}
}
while(index < titleList.size){
myHasMap.put(titleList[index],itemList!!)
break
}
index = index + 1
for(key in myHasMap.keys){
Log.d("TAG",key+" => "+myHasMap[key])
}
expandablelistadapter!!.notifyDataSetChanged()
}
}
})
}
}
结果如下:
//1st iterator:
title1 => [item1,item2,item3]
//2nd iterator:
title1 => [item4,item5]
title2 => [item4,item5]
//3rd iterator:
title1 => [item6,item7]
title2 => [item6,item7]
title3 => [item6,item7]
这是结果,它是正确的。我希望如此:
//1st iterator:
title1 => [item1,item3]
//2nd iterator:
title1 => [item1,item3]
title2 => [item4,item5]
//3rd iterator:
title1 => [item1,item5]
title3 => [item6,item7]
我猜我的问题是 hasmap 无法保存添加到 hasmap 的数据。
将数据添加到hashmap的正确方法是什么?我怎样才能获得正确的结果?
解决方法
这是如何在其他包数组中添加 arrayList 的示例
val items = eventData.get(EVENT_PARAM_CART_ITEM) as ArrayList<Item>
var arrayOf = arrayListOf<Bundle>()
for ((index,item) in items.withIndex()) {
val itemJeggings = Bundle().apply {
putString(FirebaseAnalytics.Param.ITEM_ID,items[index].itemId.toString())
putString(FirebaseAnalytics.Param.ITEM_BRAND,items[index].brand)
putLong(FirebaseAnalytics.Param.QUANTITY,items[index].quantity?.toLong()!!)
putString(FirebaseAnalytics.Param.CURRENCY,items[index].currency)
putDouble(FirebaseAnalytics.Param.PRICE,items[index].price?.toDouble()!!)
}
arrayOf.add(itemJeggings)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。