私はJavaからKotlinに自分のアプリを変換しようとしていました。Kotlin - メンバー宣言を期待しています
Androidスタジオ内蔵コンバータを使用して、発生したエラーのほとんどを修正しました。
は、この1つは私に本当にハード時間を与えているKotlinする新しいビーイング:
私はJavaで書かれたと明らかに私はRecyclerView
でアイテムのクリックを管理することができます任意のエラー、なし、変換しまったこのクラスを得ました:
ItemClickSupport.addTo(recyclerView!!).setOnItemClickListener { recyclerView, position, v ->
val itemIntent = Intent([email protected], CreateSubscription::class.java)
...
}
のTh:それはonCreate
機能で、次のように設定されています、変換後の主な活動で
class ItemClickSupport private constructor(private val mRecyclerView: RecyclerView) {
private var mOnItemClickListener: OnItemClickListener? = null
private var mOnItemLongClickListener: OnItemLongClickListener? = null
private val mOnClickListener = View.OnClickListener { v ->
if (mOnItemClickListener != null) {
val holder = mRecyclerView.getChildViewHolder(v)
mOnItemClickListener!!.onItemClicked(mRecyclerView, holder.adapterPosition, v)
}
}
private val mOnLongClickListener = View.OnLongClickListener { v ->
if (mOnItemLongClickListener != null) {
val holder = mRecyclerView.getChildViewHolder(v)
[email protected] mOnItemLongClickListener!!.onItemLongClicked(mRecyclerView, holder.adapterPosition, v)
}
false
}
private val mAttachListener = object : RecyclerView.OnChildAttachStateChangeListener {
override fun onChildViewAttachedToWindow(view: View) {
if (mOnItemClickListener != null) {
view.setOnClickListener(mOnClickListener)
}
if (mOnItemLongClickListener != null) {
view.setOnLongClickListener(mOnLongClickListener)
}
}
override fun onChildViewDetachedFromWindow(view: View) {
}
}
init {
mRecyclerView.setTag(R.id.item_click_support, this)
mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener)
}
fun setOnItemClickListener(listener: OnItemClickListener): ItemClickSupport {
mOnItemClickListener = listener
return this
}
fun setOnItemLongClickListener(listener: OnItemLongClickListener): ItemClickSupport {
mOnItemLongClickListener = listener
return this
}
private fun detach(view: RecyclerView) {
view.removeOnChildAttachStateChangeListener(mAttachListener)
view.setTag(R.id.item_click_support, null)
}
interface OnItemClickListener {
fun onItemClicked(recyclerView: RecyclerView, position: Int, v: View)
}
interface OnItemLongClickListener {
fun onItemLongClicked(recyclerView: RecyclerView, position: Int, v: View): Boolean
}
companion object {
fun addTo(view: RecyclerView): ItemClickSupport {
var support: ItemClickSupport? = view.getTag(R.id.item_click_support) as ItemClickSupport
if (support == null) {
support = ItemClickSupport(view)
}
return support
}
fun removeFrom(view: RecyclerView): ItemClickSupport? {
val support = view.getTag(R.id.item_click_support) as ItemClickSupport
support?.detach(view)
return support
}
}
}
、
Type mismatch:
required: ItemClickSupport.OnItemClickListener
Found: (???, ???, ???) -> Unit
は今、私はUnit
はKotlinのvoid
ですけど、エラーがどこにあるか私は理解することはできません:E IDEは私に次のエラーを与えています。
提案されているようthis answerをチェックした後、私は次のコードを書いた:
ItemClickSupport.addTo(recyclerView!!).setOnItemClickListener(
object: ItemClickSupport.OnItemClickListener {
val itemIntent = Intent([email protected], CreateSubscription::class.java)
val bundle = Bundle()
bundle.putParcelable("selected", filteredList!![position])
itemIntent.putExtras(bundle)
startActivity(itemIntent)
})
は今、私はそれがコンストラクタに関係しているthis other answerに述べたように
expected member declaration
を取得しています。
これはItemClickSupport.OnItemClickListenerコンストラクタですか?もしそうなら、私は何を変えるべきですか?
私はエラーがまだあなたがKotlinに両方のファイルを変換したのでとOnItemClickListener
インタフェースがで書かれているとして、それがどのsintaxエラー
オブジェクト内でオーバーライドする関数を宣言する必要があります。 –