一覧表示で
・ListView
・RecyclerView
の使い方が混乱していたので、ちょっと整理のためコードを作って見ました
ここ に置いてあります
今回は ListView + ArrayAdpter で表示するケース
画面の設定
activity_list1.xml に ListView を設定
追加用にボタンも設定してます
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ListView
android:id="@+id/listView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="9">
</ListView>
<Button
android:id="@+id/btnAdd1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="追加"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
サンプル用のデータ
データにサンプルのクラス(ClsListData.kt)を作りって確認してます
使用する場合は、ここでファイルやデータベースとリンクすればいいかと
class ClsListData {
private var itemCount = 10
private val dummyList : ArrayList<String> = ArrayList()
init {
dummyList.add("サンプル 001")
dummyList.add("サンプル 002")
dummyList.add("サンプル 003")
dummyList.add("サンプル 004")
dummyList.add("サンプル 005")
dummyList.add("サンプル 006")
dummyList.add("サンプル 007")
dummyList.add("サンプル 008")
dummyList.add("サンプル 009")
dummyList.add("サンプル 010")
}
val size : Int
get() {
return dummyList.size
}
val listData : ArrayList<String>
get() {
return dummyList
}
// 追加
fun putItem( ) {
itemCount++
val itemData : String = String.format( "サンプル %03d",itemCount)
dummyList.add(itemData)
}
// 取得
fun getItem( Idx:Int) : String {
return dummyList[Idx]
}
// 削除
fun deleteItem(Idx:Int) {
dummyList.removeAt(Idx)
}
// 移動
fun moveItem(formIdx:Int, toIdx:Int) {
if ( 1 == abs(formIdx-toIdx)) {
exchangeItem(formIdx, toIdx)
} else if (formIdx < toIdx ) {
// 上から下へ
val tmp = dummyList[formIdx]
val sPosition = formIdx
val ePosition = toIdx-1
for(i:Int in sPosition..ePosition) {
exchangeItem(i,i+1)
}
dummyList[toIdx] = tmp
} else {
// 下から上へ
val tmp = dummyList[toIdx]
val sPosition = toIdx
val ePosition = formIdx+1
for(i:Int in sPosition..ePosition) {
exchangeItem(i,i-1)
}
dummyList[toIdx] = tmp
}
}
// 入れ替え
private fun exchangeItem(formIdx:Int, toIdx:Int) {
val tmp : String = dummyList[toIdx]
dummyList[toIdx] = dummyList[formIdx]
dummyList[formIdx] = tmp
}
}
使ってないメゾットりますが、今回は気にしないでください
(次回の分です)
表示&操作
class List1Activity : AppCompatActivity() {
private val mSampleData = ClsListData()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_list1)
btnAdd1.setOnClickListener {
mSampleData.putItem()
listRedisply()
}
// クリック
listView1.setOnItemClickListener {parent, view, position, id ->
val selText = mSampleData.getItem(position)
Toast.makeText(this, "Clicked: ${selText}", Toast.LENGTH_SHORT).show()
}
// 長押し
listView1.setOnItemLongClickListener { parent, view, position, id ->
AlertDialog.Builder(this).apply {
setTitle("削除")
setMessage(mSampleData.getItem(position))
setPositiveButton("OK", DialogInterface.OnClickListener { _, _ ->
// OKをタップしたときの処理
mSampleData.deleteItem(position)
listRedisply()
})
setNegativeButton("Cancel", null)
show()
}
return@setOnItemLongClickListener true
}
}
override fun onResume() {
super.onResume()
listRedisply()
}
//
private fun listRedisply() {
val listAdapter = ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1)
val data = mSampleData.listData
for(i:Int in 1..data.size) {
listAdapter.add(data[i-1])
}
listView1.adapter = listAdapter
}
}
出来る事としては
・クリックで Toastに選ばれたデータを表示
・長押しすると、削除して良いかのダイアログが表示されOKで削除
・「追加」ボタンを押すと、最後にデータが追加される
単純に一覧表するならこの方法で問題ないと思います