インターフェイスを使用してクリックイベントを作成するにはどうすればよいですか?インターフェイスアンドロイドを使用してアダプタでonclickイベントを作成する方法は?
私のアプリケーションでは、アダプタのアイテムを親アクティビティにクリックしたことを検出するためにビューのクリックインタフェースを作成しました。私はこのインターフェイスを使用してビューリスナーを呼び出すことができますどのようにアダプタとインターフェイスとメソッドを作成した後?
インターフェイスを使用してクリックイベントを作成するにはどうすればよいですか?インターフェイスアンドロイドを使用してアダプタでonclickイベントを作成する方法は?
私のアプリケーションでは、アダプタのアイテムを親アクティビティにクリックしたことを検出するためにビューのクリックインタフェースを作成しました。私はこのインターフェイスを使用してビューリスナーを呼び出すことができますどのようにアダプタとインターフェイスとメソッドを作成した後?
このコードを確認してください。うまくいきます。
最初にアダプタクラスを作成します。
class ChapterAdapter(private val activity: Activity, val mWords: ArrayList<Chapter>, val btnlistener: BtnClickListener) : RecyclerView.Adapter<ChapterAdapter.ViewHolder>() {
companion object {
var mClickListener: BtnClickListener? = null
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
return ViewHolder(layoutInflater.inflate(R.layout.layout_capter_raw, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
mClickListener = btnlistener
val item = mWords[position]
holder.layout_chapter_name.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
if (mClickListener != null)
mClickListener?.onBtnClick(position)
}
})
}
override fun getItemCount(): Int {
return mWords.size
}
override fun getItemId(position: Int): Long {
return super.getItemId(position)
}
override fun getItemViewType(position: Int): Int {
return super.getItemViewType(position)
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val txt_capter_name = view.txt_capter_name
}
open interface BtnClickListener {
fun onBtnClick(position: Int)
}
}
アクティビティまたはフラグメントにアダプタを作成して宣言した後。
これを行う適切な方法は、Java Interfaces
の代わりにコールバックを使用しています。例:
class MyAdapter(private val callback: (YourModel) -> Unit) {
override fun onBindViewHolder(holder: DataBoundViewHolder<YourModel>, position: Int) {
bind(holder.binding, items!![position])
holder.binding.executePendingBindings()
holder.binding.root.setOnClickListener { callback(binding.model) }
}
}
とアダプタを作成し、どこか
MyAdapter myAdapter = MyAdapter({ println{"Clicked $it"} })
編集を使用して:アスカーiがスミットからのコードを使用してKotlin-コールバックとのインタフェースを置き換え完全に動作するコードを見てみたいので。
class ChapterAdapter(private val activity: Activity,
val mWords: ArrayList<Chapter>,
val callback: (Any) -> Unit) :
RecyclerView.Adapter<ChapterAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
return ViewHolder(layoutInflater.inflate(R.layout.layout_capter_raw, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
val item = mWords[position]
holder.layout_chapter_name.setOnClickListener(callback {$it})
}
override fun getItemCount(): Int = mWords.size
override fun getItemId(position: Int): Long = super.getItemId(position)
override fun getItemViewType(position: Int): Int = super.getItemViewType(position)
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val txt_capter_name = view.txt_capter_name
}
、最終的にはアダプタあなたは "インターフェース" とはどういう意味ですか
listAdapter = ChapterAdapter(activity, _arrChapterList, {
toast("Clicked $it", Toast.LENGTH_LONG)
})
ラムダ式を使用しています。これはショットソリューションです – ios
Kotlin SAM-Type :-) –
インターフェイスでどのようにできるか完全なコードを提供できますか? –
を作成しますか? https://kotlinlang.org/docs/reference/interfaces.html?いくつかのコードを共有できますか? –
コードをアップロード –
[インターフェイスは既にリスナーです]をクリックします。もう1つ追加しましたか? –