前提・実現したいこと
かんたんなメモ帳のようなアプリを作っている。
装置の内容:
」
• 赤いボタンを押したら黄色いリストが出て、もう1度押すと黄色いリストをしまう
• プラスボタンを押すと、黄色いリストが増える
• 黄色いリスト、青いリストともに書き込み可能
もともと Github の ExpandableCardView という装置を参考にしてコードを書いていった。
現在は、赤いボタンを押したら黄色いバーが出てくるコードを書いている。
発生している問題・エラーメッセージ
Class 'ExpandableCardViewAdapter' is not abstract and does not implement abstract base member public abstract fun onBindViewHolder(holder: [ERROR:RecyclerView.viewHolder],position: Int): Unit defined in androidx.recyclerview.widget.RecyclerView.Adapter
'onBindViewHolder' overrides nothing
Unresolved refference: view
該当のソースコード
package com.example.expandable_cardview_2 import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.cardview_parent.view.* class ExpandableCardViewAdapter(var items: MutableList<Item>) : RecyclerView.Adapter<RecyclerView.viewHolder>() { companion object { const val PARENT = 0 const val CHILD = 1 const val OPEN = 0.0F const val CLOSE = 180.0F } data class Item(val type: Int = 0, var text: String = "Default", var children: List<Item>? = null) inner class ItemHolder(v: View) : RecyclerView.ViewHolder(v) { val toggleImageView = v.item_toggle_bottun!! } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val inflater = LayoutInflater.from(parent.context) var view: View? = null when (viewType) { PARENT -> view = inflater.inflate(R.layout.cardview_parent, parent, false) CHILD -> view = inflater.inflate(R.layout.cardview_child, parent, false) } return this.ItemHolder(view!!) } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { val itemHolder = holder as? ItemHolder val item = items[position] itemHolder?.let { it -> it.toggleImageView.let { it1 -> it1.setImageResource(R.drawable.toggle) it1.rotation = if (item.children == null) OPEN else CLOSE it1.setOnClickListener { val start: Int = items.indexOf(item) + 1 if (item.children == null) { var count = 0 var nextHeader = items.indexOf(items.find { it2 -> (count++ >= start) && (it2.type == item.type) }) if (nextHeader == -1) nextHeader = items.size item.children = items.slice(start until nextHeader) val end = item.children!!.size if (end > 0) items.removeAll(item.children!!) view.animate().rotation(CLOSE).start() notifyItemRangeRemoved(start, end) } else { item.children?.let { items.addAll(start, it) view.animate().rotation(OPEN).start() notifyItemRangeInserted(start, it.size) item.children = null } } } } } } override fun getItemCount(): Int = items.size override fun getItemViewType(position: Int): Int = items[position].type }
試したこと
もともと、このリストは書き込み不可だったのですが、無理やり書き込み可能なものにしたため、エラーになったのかもしれないです。
リストがイチバン最初は一本もないのか、それともあるのかでコードは変わるというのはわかるんですが、それをどう表現するのかわかりません。
青いリスト、黄色いリストのコードはエラーがない状態にしてあります。
補足情報(FW/ツールのバージョンなど)
このサイトを参考にしています。https://github.com/handdrip/Expandable-CardView
Kotlin:1.3.70 最新のバージョンです。
回答1件
あなたの回答
tips
プレビュー