پیش فروش آموزش توسعه uncox Notify با Framework اختصاصی ( با کاتلین برای اندروید ) اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
interface ها در کاتلین 
134089  1 هفته پیش  1 هفته پیش
+1 0

سلام و خسته نباشید خدمت استاد و عزیزان
دوستان امکانش هست کسی مفهوم interface در کاتلین رو و ارتباطش با وراثت به من بگه

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
وحید گروسی  1 هفته پیش
+1 0

با سلام و احترام
وقتی ما کاری را بخواهیم انجام بدهیم ولی نمی خواهیم بدانیم که چگونه انجام می شود از interface استفاده می کنیم به عنوان مثال من به شما می گویم بروید و از منزل مدرک خود را بیاورید. در اینجا برای من یک چیز مهم است آن هم مدرک پس اینکه شما چگونه مدرک را می آورید با هوپیما می روید با ... مهم نیست مهم مدرک است که بیاورید و به من بدهید.
مثال واضح تر در برنامه نویسی اندروید وقتی ما روی یک آیتم در ریسایلکرویو کلیک می کنیم انتظار داریم آبجکتی که روی آن کلیک کرده ایم به ما داده شود به صورت پیشفرض این امکان وجود ندارد ما با کمک اینترفیس میتوانیم بگوییم هر وقت روی آیتم کلیک شد مقدار متناظر در آن Position‌را به ما برگرداند.
این توضیح خلاصه ای از مفهوم اینترفیس بود.
در مثال زیر با استفاده از onTransactionClickListener میخواهیم وقتی کاربر روی دکمه حذف (delete) کلیک کرد آبجکت متناظر آن را به کاربر در جایی که فراخوانی شده است برگردانیم.

Adapter
class TransactionListAdapter(@LayoutRes var layoutItemRes: Int, var onTransactionClickListener: OnTransactionClickListener) :
ListAdapter<Transaction, TransactionListAdapter.TransactionViewHolder>(DIFF_CALLBACK) {
private var selectedItem = 0

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TransactionListAdapter.TransactionViewHolder {
val view = LayoutInflater.from(parent.context).inflate(layoutItemRes, parent, false)
return TransactionListAdapter.TransactionViewHolder(view)
}

override fun onBindViewHolder(holder: TransactionListAdapter.TransactionViewHolder, position: Int) {
holder.imgItemTransactionDelete.setOnClickListener {
onTransactionClickListener.onTransactionClicked(getItem(position))
}
}

class TransactionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

}


companion object {
var DIFF_CALLBACK: DiffUtil.ItemCallback<Transaction> = object : DiffUtil.ItemCallback<Transaction>() {
override fun areItemsTheSame(oldItem: Transaction, newItem: Transaction): Boolean {
return oldItem.id === newItem.id
}

override fun areContentsTheSame(oldItem: Transaction, newItem: Transaction): Boolean {
return oldItem.equals(newItem)
}
}
}
}

MainActivity
val listener = object : OnTransactionClickListener {
override fun onTransactionClicked(transaction: Transaction) {
Toast.makeText(VBase.getContext(), "" + transaction.toString(), Toast.LENGTH_LONG).show()
// با هر بار کلیک مقدار آن در MainActivity در دسترس است
}
}
transactionListAdapter = TransactionListAdapter(R.layout.item_transaction_in_category, listener)

وقتی ما کلاس پدر که از آن اصطلاحاْ extends کرده ایم دارای متد های اینترفیس باشد ما در کلاس فرزند می بایست آن متد ها را پیاده سازی نماییم. 
ذکر یک نکته مهم است :
مفهوم Abstraction را با Interface اشتباه نگیرید


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .