
前回、RecyclerViewを使ってTodoアプリを作ってみました。
今回はそのおまけというか、アダプタークラス(RecyclerAdapter.kt)のファイルに3つほど、軽めの忠告が出ていますので、それについて修正の解説。
動画
テキスト
①Redundant string template
は、{}を使うのであれば
.setTitle("${listPosition.myTodo}ですよ")
みたいに、変数と文字を連結させると、表示は消えます。
②Redundant SAM-constructorの方は
DialogInterface.OnClickListener
これは文字が薄くなって省略してもいいですよーっつうことなので
お言葉にあまえて、バッサリいっちゃいましょう。
そうすると、
波カッコの中に、下線ズーッとが敷かれていますね。
これ()の外に出しなさいってことなので
{}もろとも、()の外に出す。
で、コンマはいらないので削除。
これでですね、Yesを押した時の処理を、
波カッコの中で実行しますよ、っていう書き方になりました。
1 2 3 4 5 6 | //15)yesボタンを押した時の処理 .setPositiveButton( "Yes" ){ _, _ -> todoList.removeAt(position) //16)表示を更新 rAdapter.notifyItemRemoved(position) } |
で、こうなってくると上のimportのDialogInterfaceがいらないので、これは削ってあげましょう。
コード
▼RecyclerAdapter.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 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 } } |