I would like use setItemChecked to highlight list item by default. checkedItemPosition set the checkedItemPosition but not item list is highlighted.
Here is my array adapter code :
class MyListAdapter(
context: Context,
private val myItemList: List<Mytem>)
: ArrayAdapter<Mytem>(context, R.layout.item_simple, myItemList) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val inflater = context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val rowView: View?
if (!myItemList[position].isHeader) {
rowView = inflater.inflate(R.layout.item_simple, parent, false)
rowView.itemTitle.text = myItemList[position].name
} else {
rowView = inflater.inflate(R.layout.item_header_group, parent, false)
rowView.header.text = myItemList[position].name
}
return rowView
}
override fun isEnabled(position: Int): Boolean {
return !myItemList[position].isHeader
}
}
In fragment I have the following code :
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
this.viewModel.myListItem.observe(this, Observer<List<MyItem>> { item ->
val adapter = MyListAdapter(this.view!!.context, item!!)
this.view!!.listViewFragment.adapter = adapter
this.view!!.listViewFragment.divider = null
this.view!!.listViewFragment.isClickable = true
})
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_listview, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.validatePenChoiceButton.setOnClickListener {
viewModel.validate(this.view!!.listViewFragment.checkedItemPosition)
}
}
The listview cml code :
<ListView
android:id="@+id/listViewFragment"
android:layout_width="match_parent"
android:layout_height="0sp"
android:layout_weight="30"
android:choiceMode="singleChoice"
android:listSelector="@color/item_listSelector_color"
android:textColor="@color/white" />
I have try the following methodes : the checkitem is changed but the listview is not highlighted.
this.view!!.listViewFragment.setItemChecked(3, true)
And I have test this :
this.view!!.listViewFragment.refreshDrawableState()
this.view!!.listViewFragment.invalidateViews()
How I can set default highlighted item properly ?
I created sample RecyclerView adapter. You can use your View instead of TextView and setBackgroundColor() instead of setTextColor(). You should trigger checkedItem(int) method in your fragment then notifyDataSetChanged or notifyItemChanged()