Android의 ListView에서 데이터를 추가하거나 삭제하려면
ListView의 Adapter에 전달된 데이터를 갱신하고
Adapter에 갱신되었다는 것을 전달해주면 된다.
ListView 데이터 갱신 예제 xml 코드
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="항목개수 : 0개"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
MainActivity 코드
class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
// 데이터가 없는 리스트를 만든다.
val rowList = mutableListOf<String>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
activityMainBinding.run{
listView.run{
adapter = ArrayAdapter<String>(
this@MainActivity, android.R.layout.simple_list_item_1, rowList
)
}
button.run{
setOnClickListener {
// Aapter를 구성하기 위해 사용한 list에 데이터를 추가한다.
val str1 = "row : ${System.currentTimeMillis()}"
rowList.add(str1)
textView.text = "항목 개수 : ${rowList.size}개"
// ListView의 adapter를 통해 갱신을 요청한다.
val adapter = listView.adapter as ArrayAdapter<String>
adapter.notifyDataSetChanged()
}
}
button2.run{
setOnClickListener {
// 제일 마지막 값을 제거한다.
rowList.removeLast()
textView.text = "항목 개수 : ${rowList.size}개"
val adapter = listView.adapter as ArrayAdapter<String>
adapter.notifyDataSetChanged()
}
}
}
}
}