LoginSignup
0
1

More than 5 years have passed since last update.

リスト表示 - 1

Posted at

一覧表示で
・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で削除
・「追加」ボタンを押すと、最後にデータが追加される

単純に一覧表するならこの方法で問題ないと思います

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1