I am using array and HashMap to sort Firebase child with children count and setting that into a dropDown array in Lotlin list. The problem is the dropdown items are not displayed. I need to sort Firebase child Like political with its child count and I try to adding that into ArrayAdapter of dropdown like this:
adapbl = ArrayAdapter<String>(this,R.layout.dropdownbl,keyarray)
autocomplete.setAdapter(adapbl)
Firebase database image:
Dropdown not displayed image:
Activity code:
class TrendingPosts : AppCompatActivity() {
private lateinit var bottomnav : BottomNavigationView
private var pTime : Long = 0
private lateinit var itembl: Array<String>
private lateinit var adapbl : ArrayAdapter<String>
private lateinit var autocomplete : AutoCompleteTextView
private lateinit var content: ArrayList<String>
private lateinit var keyarray: Array<String>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_trending_posts)
content = ArrayList<String>()
content.add("POLITICAL")
content.add("ENTERTAINMENT")
content.add("SOCIAL")
content.add("ENVIRONMENT")
var hm = HashMap<String,String>()
for(item : String in content ){
val database: FirebaseDatabase = FirebaseDatabase.getInstance()
val myRef: DatabaseReference = database.getReference("ContentType").child(item)
myRef.addValueEventListener(object : ValueEventListener{
@SuppressLint("SetTextI18n")
override fun onDataChange(snapshot: DataSnapshot) {
val text:String = snapshot.childrenCount.toString()
hm.put(item,text)
}
override fun onCancelled(error: DatabaseError) {
}
})
}
var sortedmap = hm.toList().sortedBy{
(k,v)-> v }.toMap()
keyarray = sortedmap.keys.toTypedArray()
autocomplete = findViewById(R.id.BL_Lang_On)
adapbl = ArrayAdapter<String>(this,R.layout.dropdownbl,keyarray)
autocomplete.setAdapter(adapbl)
autocomplete.setOnItemClickListener{ parent,view,position,id ->
val languages : String = parent.getItemAtPosition(position).toString()
createSnackbar(
"SELECTED: "+languages
)
}
bottomnav = findViewById(R.id.bottomnavigation)
bottomnav.selectedItemId = R.id.ctrend
bottomnav.setOnNavigationItemSelectedListener { item ->
when(item.itemId){
R.id.home ->{
startActivity(Intent(this, MainActivity::class.java))
overridePendingTransition(0,0)
true
}
R.id.cv ->{
startActivity(Intent(this, activity_for_playing_soma_videos::class.java))
overridePendingTransition(0,0)
true
}
R.id.ch ->{
startActivity(Intent(this, ForSomasunthaVideoActivity_CH::class.java))
overridePendingTransition(0,0)
true
}
R.id.ctrend ->{
overridePendingTransition(0,0)
true
}
R.id.csearch->{
// return true
startActivity(Intent(this, Search::class.java))
overridePendingTransition(0,0)
true
}
}
false
}
}
private fun createSnackbar(message: String){
val mainsh: View = findViewById(R.id.trendcons)
Snackbar.make(mainsh, message, Snackbar.LENGTH_SHORT).show()
}
}
I got fixed this by adding runOnUiThread {}
.