前回、RecyclerViewを使ってTodoアプリを作ってみました。

今回はそのおまけというか、アダプタークラス(RecyclerAdapter.kt)のファイルに3つほど、軽めの忠告が出ていますので、それについて修正の解説。

動画

テキスト

①Redundant string template

は、{}を使うのであれば

.setTitle(“${listPosition.myTodo}ですよ”)

みたいに、変数と文字を連結させると、表示は消えます。

②Redundant SAM-constructorの方は

DialogInterface.OnClickListener

これは文字が薄くなって省略してもいいですよーっつうことなので
お言葉にあまえて、バッサリいっちゃいましょう。

そうすると、
波カッコの中に、下線ズーッとが敷かれていますね。

これ()の外に出しなさいってことなので
{}もろとも、()の外に出す。
で、コンマはいらないので削除。

これでですね、Yesを押した時の処理を、
波カッコの中で実行しますよ、っていう書き方になりました。

                    //15)yesボタンを押した時の処理
                    .setPositiveButton("Yes"){ _, _ ->
                        todoList.removeAt(position)
                        //16)表示を更新
                        rAdapter.notifyItemRemoved(position)
                    }

で、こうなってくると上のimportのDialogInterfaceがいらないので、これは削ってあげましょう。

コード

▼RecyclerAdapter.kt

package com.example.recyclertodo

import android.app.AlertDialog
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
//import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView

//5)リストを用意 クラス名(private val 変数名:ArrayList<データクラス>) //or MutableList
class RecyclerAdapter(private val todoList:ArrayList<TodoData>) :RecyclerView.Adapter<RecyclerAdapter.ViewHolderItem>() {
    //listOf

    //5)ViewHolder(インナークラス)
    //16),rAdapter : RecyclerAdapter// RecyclerAdapterを受け取る
    inner class ViewHolderItem(v:View,rAdapter:RecyclerAdapter) :RecyclerView.ViewHolder(v) {
        val tvHolder : TextView = v.findViewById(R.id.tv)

        //12)クリック処理(1行分の画面(view)が押されたら~)
        init {
            v.setOnClickListener {
                val position:Int = adapterPosition
                val listPosition = todoList[position]

                //14)アラートダイアログ
                AlertDialog.Builder(v.context)
                    //.setTitle("${listPosition.myTodo}")
                    .setTitle("${listPosition.myTodo} です")
                    .setMessage("本当に削除しますか")
                    //15)yesボタンを押した時の処理
                    .setPositiveButton("Yes"){ _, _ ->
                        todoList.removeAt(position)
                        //16)表示を更新
                        rAdapter.notifyItemRemoved(position)
                    }
                    .setNegativeButton("No",null)
                    .show()

                //13)トーストでposition番目を表示してみる
                //Toast.makeText(v.context,"$listPosition",Toast.LENGTH_SHORT).show()
                //Toast.makeText(v.context,"${listPosition.myTodo}",Toast.LENGTH_SHORT).show()
            }
        }
    }

    //6)一行だけのViewを生成
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderItem {
        val itemXml = LayoutInflater.from(parent.context)
            .inflate(R.layout.one_layout,parent,false)
        return ViewHolderItem(itemXml,this) //16)RecyclerAdapterを受け渡す
    }

    //7)position番目のデータをレイアウト(xml)に表示するようセット
    override fun onBindViewHolder(holder: ViewHolderItem, position: Int) {
        val currentItem = todoList[position] //何番目のリスト(アイテム)ですか
        holder.tvHolder.text = currentItem.myTodo //そのリストの中の要素を指定して代入
    }

    //8)リストサイズ
    override fun getItemCount(): Int {
        return todoList.size
    }
}

    コメントを残す