Kotlin Android – Refresh ListView
Android ListView is used to display items of an array as a scrollable list. Using an ArrayAdapter, the elements are loaded into a ListView. Items of the array (loaded into the ListView) may change during the course of time, and user may request for refresh to reload the items of ListView.
In this tutorial, we shall learn how to Refresh ListView using a Kotlin Android Application.
To refresh the ListView in Android, call notifyDataSetChanged() method on the Adapter that has been set with the ListView. Also note that the method notifyDataSetChanged() has to be called on UI thread. If by chance, it happens that you should call notifyDataSetChanged() method on non-UI thread, use runOnUiThread() method.
Example – Refresh Android ListView
In the following example, we have a ListView populated from a String Array. Two buttons : Change and Refresh ListView are provided. On clicking Change button, we are changing the data in the string array. On clicking the Refresh ListView button, we are calling the method notifyDataSetChanged() on the Adapter.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.tutorialkart.androidlistview.MainActivity"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/change" android:text="Change" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/refresh" android:text="Refresh ListView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <ListView android:id="@+id/listview_1" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
res/layout/listview_item.xml
Each item in the ListView is displayed as following TextView, with the specified width, height, padding, text size and text style.
<?xml version="1.0" encoding="utf-8"?> <!-- Each List Item is displayed as TextView defined below --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/label" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dip" android:textSize="16dip" android:textStyle="bold" > </TextView>
MainActivity.kt
package com.tutorialkart.androidlistview import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.* import android.widget.AdapterView.OnItemClickListener class MainActivity : AppCompatActivity() { var array = arrayOf("Melbourne", "Vienna", "Vancouver", "Toronto", "Calgary", "Adelaide", "Perth", "Auckland", "Helsinki", "Hamburg", "Munich", "New York", "Sydney", "Paris", "Cape Town", "Barcelona", "London", "Bangkok") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val adapter = ArrayAdapter(this, R.layout.listview_item, array) val listView:ListView = findViewById(R.id.listview_1) listView.setAdapter(adapter) listView.onItemClickListener = object : OnItemClickListener { override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) { // value of item that is clicked val itemValue = listView.getItemAtPosition(position) as String // Toast the values Toast.makeText(applicationContext, "Position :$position\nItem Value : $itemValue", Toast.LENGTH_LONG) .show() } } val change_btn = findViewById(R.id.change) as Button change_btn.setOnClickListener { // data in the source array has been changed array.set(0,"New City") array.set(1,"Another New City") } val btn_click_me = findViewById(R.id.refresh) as Button btn_click_me.setOnClickListener { // let the adapter know that data set has been changed // adapter will notify respective views and the views shall refresh adapter.notifyDataSetChanged() } } }
Conclusion
In this Kotlin Android Tutorial – Refresh ListView, we have learnt to refresh a ListView to reflect the changes made at the source data.