✏️ یک آداپتور برای چند RecyclerView
قطعاً هر برنامهنویس اندرویدی با Recycler
برای نمایش آیتم و کارد کار کرده
و میدونه که باید برای نمایش اصولی،
آداپتوری(Adapter) براش بنویسه
ولی یه لحظه تصور کن . . .🙄
چهار تا صفحه داری، چند تا هم دیالوگ که
باید از RecyclerView استفاده کنی و برای
هر کدومش یه آداپتور بنویسی🤯
خب چیکار کنیم که کدی بهینه و کمحجم
داشته باشیم که قابل نگهداری و تستپذیر
باشه؟؟🤗
یه آداپتور جنریک میتونه به داد شما برسه😉
بریم تو پست بعدی یاد بدم تا بسازیش...👇
🆔 @AndroidDev_Tips
قطعاً هر برنامهنویس اندرویدی با Recycler
برای نمایش آیتم و کارد کار کرده
و میدونه که باید برای نمایش اصولی،
آداپتوری(Adapter) براش بنویسه
ولی یه لحظه تصور کن . . .🙄
چهار تا صفحه داری، چند تا هم دیالوگ که
باید از RecyclerView استفاده کنی و برای
هر کدومش یه آداپتور بنویسی🤯
بهت تبریک میگم
حالا یه کد نامنظم، پرحجم، ناخوانا و بدرد نخور داری😁
خب چیکار کنیم که کدی بهینه و کمحجم
داشته باشیم که قابل نگهداری و تستپذیر
باشه؟؟🤗
یه آداپتور جنریک میتونه به داد شما برسه😉
بریم تو پست بعدی یاد بدم تا بسازیش...👇
🆔 @AndroidDev_Tips
تجربیات یک برنامهنویس اندروید
✏️ یک آداپتور برای چند RecyclerView قطعاً هر برنامهنویس اندرویدی با Recycler برای نمایش آیتم و کارد کار کرده و میدونه که باید برای نمایش اصولی، آداپتوری(Adapter) براش بنویسه ولی یه لحظه تصور کن . . .🙄 چهار تا صفحه داری، چند تا هم دیالوگ که باید…
آداپتور عمومی | Generic Adapter
1️⃣ مرحلهی اول
ساختن آداپتور جنریک:
همه ی آداپتور هاتون رو حذف کنید چون این
آداپتور کار همه شون رو می کنه!
🖐 جای جالبش اینجاست که دیگه نیاز نیست
رابط(Interface) بزارید بین آداپتور و کدها
که موقع لانگ کلیک و کلیک عادی تو هر کدوم
یه تابع بسازید!
همچنین ارث بری از رابط هم نیاز نیست و
این بخش از پروژهتون رو بیشتر از 50 درصد
سبک تر میکنه!
برای زبانهای دیگه هم فقط مثل جاوا و...
کافیه این کد رو به یک Ai بفرستید تا تبدیل
کنه
بریم تو پست بعدی تا نحوه ی استفاده رو هم ببینیم...👇
🆔 @AndroidDev_Tips
1️⃣ مرحلهی اول
ساختن آداپتور جنریک:
class GenericAdapter<T>(
private val data: List<T>,
@LayoutRes private val layoutId: Int,
private val bind: (View, T) -> Unit,
private val onClick: ((T) -> Unit)? = null,
private val onLongClick: ((T) -> Unit)? = null ) :
RecyclerView.Adapter<GenericAdapter<T>.ViewHolder>() {
inner class ViewHolder(val view: View) :
RecyclerView.ViewHolder(view) {
fun bindItem(item: T) {
bind(view, item)
// فرایند کلیک عادی:
view.setOnClickListener {
onClick?.invoke(item)
}
//فرایند کلیک طولانی:
view.setOnLongClickListener {
onLongClick?.invoke(item)
true
}
}
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int):
ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(layoutId, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(
holder: ViewHolder,
position: Int) {
holder.bindItem(data[position])
}
override fun getItemCount() = data.size
}
همه ی آداپتور هاتون رو حذف کنید چون این
آداپتور کار همه شون رو می کنه!
🖐 جای جالبش اینجاست که دیگه نیاز نیست
رابط(Interface) بزارید بین آداپتور و کدها
که موقع لانگ کلیک و کلیک عادی تو هر کدوم
یه تابع بسازید!
همچنین ارث بری از رابط هم نیاز نیست و
این بخش از پروژهتون رو بیشتر از 50 درصد
سبک تر میکنه!
برای زبانهای دیگه هم فقط مثل جاوا و...
کافیه این کد رو به یک Ai بفرستید تا تبدیل
کنه
بریم تو پست بعدی تا نحوه ی استفاده رو هم ببینیم...👇
🆔 @AndroidDev_Tips
آداپتور عمومی | Generic Adapter
2️⃣ مرحله ی دوم و آخر
استفاده از آداپتور جنریک:
حالا کافیه این adapter رو تنظیم کنید روی ریسایکلر ویو خودتون😉
فقط باید بجای [Item] اسم دیتا کلاس آیتم مدنظرتون رو بنویسید، بجای [Data] اطلاعات و دیتاتون رو از دیتابیس یا به هر طریقی جایگذاری کنید، بجای [ItemLayoutId] هم آیدی اون لایه ای که میخواید نشون بدید رو جایگذاری کنید!!
🆔 @AndroidDev_Tips
2️⃣ مرحله ی دوم و آخر
استفاده از آداپتور جنریک:
val adapter = GenericAdapter<[Item]>(
data = [Data],
layoutId = R.layout.[ItemLayoutId],
bind = { view, item ->
view.findViewById<[TextView]>(R.id.[aViewId]).text = item.[Name]
//هر کدی که میخواید توی کلاس بایند ران بشه
},
onClick = { //کد های فرایند کلیک عادی },
onLongClick = { //کدهای فرایند کلیک طولانی }
)
حالا کافیه این adapter رو تنظیم کنید روی ریسایکلر ویو خودتون😉
فقط باید بجای [Item] اسم دیتا کلاس آیتم مدنظرتون رو بنویسید، بجای [Data] اطلاعات و دیتاتون رو از دیتابیس یا به هر طریقی جایگذاری کنید، بجای [ItemLayoutId] هم آیدی اون لایه ای که میخواید نشون بدید رو جایگذاری کنید!!
🆔 @AndroidDev_Tips
🪧 مخزنی در گیتهاب با 1700 لوگو 🤩
👨💻 آقای ابولفضل رادمنش زحمت کشیدن و این مخزن به دنیا ما هدیه دادن🤌
لوگوهای این مخزن با فرمت XML هست تا بهتر مورد استفاده قرار بگیره توی ریسورسهامون🙃
🖇️ لینک:
https://github.com/AblRadmanesh/VectorAsset
🆔 @AndroidDev_Tips
👨💻 آقای ابولفضل رادمنش زحمت کشیدن و این مخزن به دنیا ما هدیه دادن🤌
لوگوهای این مخزن با فرمت XML هست تا بهتر مورد استفاده قرار بگیره توی ریسورسهامون🙃
برای استفاده کافیه فقط انتخاب کنید و به بخش ریسورسهاتون اضافه کنید و تمام. به همین سادگی!
🖇️ لینک:
https://github.com/AblRadmanesh/VectorAsset
🆔 @AndroidDev_Tips
👍3
©️ چرا نباید کد رو «کپیپیست بیفکر» کنیم؟
کپیکردن مستقیم کد از اینترنت یا پروژههای دیگه بدون درک منطق اون، یکی از اشتباهای رایج تو مسیر یادگیری و توسعه نرمافزار هست!
✅ کاری که اکثر پیامرسانهای ایرانی، بخصوصبله انجام داد رو شما انجام ندید چون . . .
🔴 دلیل عملکرد کد رو نمیدونید و در مواجهه با ارور یا تغییر شرایط پروژه، دچار سردرگمی و باگهای متعدد میشید!
🔴 وابستگی به کدهای آماده، فرصت رشد تو مهارت حل مسئله رو از شما و تیم توسعهتون میگیره!
🔴 کوچکترین تغییر در شرایط پروژه میتونه باعث از کار افتادن کدی بشه که بدون درک کپی کردید!
به شخصه شاهد آپدیتهایپیامرسان بله بودم که با افزوده شدن هر قابلیت جدید کلی باگ جدید رو میشد که کسی از تیمشون قادر به حل اون نبود😑
حتی یه باگی داشتن که بعد هر آپدیت، یکی دو هفته ناپدید میشد ولی بعداً دوباره گل میکرد😅
🆔 @AndroidDev_Tips
کپیکردن مستقیم کد از اینترنت یا پروژههای دیگه بدون درک منطق اون، یکی از اشتباهای رایج تو مسیر یادگیری و توسعه نرمافزار هست!
✅ کاری که اکثر پیامرسانهای ایرانی، بخصوص
🔴 دلیل عملکرد کد رو نمیدونید و در مواجهه با ارور یا تغییر شرایط پروژه، دچار سردرگمی و باگهای متعدد میشید!
🔴 وابستگی به کدهای آماده، فرصت رشد تو مهارت حل مسئله رو از شما و تیم توسعهتون میگیره!
🔴 کوچکترین تغییر در شرایط پروژه میتونه باعث از کار افتادن کدی بشه که بدون درک کپی کردید!
به شخصه شاهد آپدیتهای
حتی یه باگی داشتن که بعد هر آپدیت، یکی دو هفته ناپدید میشد ولی بعداً دوباره گل میکرد😅
📌 استفاده از نمونهکدها یا کد افراد دیگه به خودی خودش اشتباه نیست؛ مسئله اصلی، نحوه استفاده از اوناست. یادگیری واقعی زمانی اتفاق میفته که کد رو تحلیل کنید و اون رو به بخشی از دانش و تجربه شخصی خودتون تبدیلش کنید😊
🆔 @AndroidDev_Tips
👍2
🦠 اولین ویروس کامپیوتری جهان...
کنجکاوی دو برادر پاکستانی!
👬 تو سال ۱۹۸۶ دو برادر پاکستانی (بسیت و امجد) ویروسی ساختن به اسم Brain که این ویروس از طریق فلاپیدیسک پخش میشد ولی بیشتر نتیجهی کنجکاوی بود تا خرابکاری🫣
❇️ همین کار ساده باعث شد دنیای فناوری بفهمه که پیشرفت بدون امنیت، یه روزی تهدید جدی به بار میاره
🟢 ویروسهایی که امروزه ابزار خرابکاری، جاسوسی و حتی جنگ نرم(سایبری) محسوب میشن، از دست دو نفر سادهلوح و کنجکاو وارد دنیامون شدن و همین تحول بود که امنیت سایبری رو به یکی از حیاتیترین حوزههای فناوری امروز تبدیل کرد😊
🆔 @AndroidDev_Tips
کنجکاوی دو برادر پاکستانی!
👬 تو سال ۱۹۸۶ دو برادر پاکستانی (بسیت و امجد) ویروسی ساختن به اسم Brain که این ویروس از طریق فلاپیدیسک پخش میشد ولی بیشتر نتیجهی کنجکاوی بود تا خرابکاری🫣
❇️ همین کار ساده باعث شد دنیای فناوری بفهمه که پیشرفت بدون امنیت، یه روزی تهدید جدی به بار میاره
🟢 ویروسهایی که امروزه ابزار خرابکاری، جاسوسی و حتی جنگ نرم(سایبری) محسوب میشن، از دست دو نفر سادهلوح و کنجکاو وارد دنیامون شدن و همین تحول بود که امنیت سایبری رو به یکی از حیاتیترین حوزههای فناوری امروز تبدیل کرد😊
🆔 @AndroidDev_Tips
👍2
تجربیات یک برنامهنویس اندروید
💰 بیاید فرهنگ سازی کنیم... 👾 درسته گرفتن هزینهی کمتر در اوایل کار عادی هست ولی خب حدی داره 🤧 بازار رو خراب نکن دوست عزیز😁 🤖 اول اینکه وقتی تازه کاری قطعاً باید قیمت کمتری واسه پروژه بگی استخدام بشی هم حقوق کمتری میگیری🙄 🤗 وقتی تونستی کارفرما رو متقاعد…
اگه فقط از تو تلگرام و سایتهای فریلنسری ایرانی پروژه گرفته باشید، این پیامم👆 رو حتماً از جون و دل درک کردید😢
راهکارش برای ما فعلاً اینه که
بریم سمت fiver و upwork تا
مطمئن باشیم که قیمتا تعرفهی
رسمی اون پلتفرمه😏
ثبتنام خودم تکمیل شه رودمپش رو براتون میزارم 😉🤝
🆔 @AndroidDev_Tips
راهکارش برای ما فعلاً اینه که
بریم سمت fiver و upwork تا
مطمئن باشیم که قیمتا تعرفهی
رسمی اون پلتفرمه😏
نه اینستاگرام 25 میلیونی اونجا خواسته شده و نه یوتیوب 18 میلیونی😅
ثبتنام خودم تکمیل شه رودمپش رو براتون میزارم 😉🤝
🆔 @AndroidDev_Tips
👍2
⌨ بستن کیبورد
این اکستنشن فانکشن (extension Function) رو سیو کنید، هر موقع خواستید کیبورد گوشی کاربر بسته بشه، کال کنید😉😁
🆔 @AndroidDev_Tips
این اکستنشن فانکشن (extension Function) رو سیو کنید، هر موقع خواستید کیبورد گوشی کاربر بسته بشه، کال کنید😉😁
// copy to YourClass.kt file ->
fun View.closeKeyboard() {
val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}// usage
binding.root.closeKeyboard()
🆔 @AndroidDev_Tips
👍2
👓 از مارک اندریسن(سازنده مرورگر موزاییک) پرسیدن چرا لینکها آبی هستن؟
-گفت: چون من آبی دوست دارم و از بقیه رنگ ها خوشم نمیاد🙄
بعدها که مرورگرهای دیگه اومدن، برای اینکه چشم کاربراشون عادت آبی یعنی قابل کلیک رو از دست ندن، ازش تبعیت کردن و الان آبی تبدیل شده به استانداردی برای قابل کلیک بودن یک لینک یا حتی متن. همینقدر الکی الکی😅
جالبه که یه مدت ادج(edge Microsoft) سعی کرد تا شخصیسازی رو تا تغییر رنگِ لینکها گسترش بده ولی کسی حتی استقبال هم نکرد😊
🆔 @AndroidDev_Tips
-گفت: چون من آبی دوست دارم و از بقیه رنگ ها خوشم نمیاد🙄
بعدها که مرورگرهای دیگه اومدن، برای اینکه چشم کاربراشون عادت آبی یعنی قابل کلیک رو از دست ندن، ازش تبعیت کردن و الان آبی تبدیل شده به استانداردی برای قابل کلیک بودن یک لینک یا حتی متن. همینقدر الکی الکی😅
جالبه که یه مدت ادج(edge Microsoft) سعی کرد تا شخصیسازی رو تا تغییر رنگِ لینکها گسترش بده ولی کسی حتی استقبال هم نکرد😊
🆔 @AndroidDev_Tips
👍3
بیش از ۳.۸ هزار میلیارد تومان(همت) فروش در Black Friday فقط در دیجیپی😳
از 1 تا 10 آذر، دیجیپی با 1.2 میلیون سفارش از 21 دسته کالا، رکورد فروش ۳.۸ همتی توسط کاربران رو ثبت کرده🫣
نسبت به همین بازه تو سال قبلی، رشد ۱۵۳% درصدی داشته (حدود 2.5 برابر شده)
این آمار فقط برای دیجیپی هست که یه پلتفرم اعتباری(قسطی) از زیر مجموعهی دیجیکالاست و با تپسی هم همکاری داره!
منبع
🆔 @AndroidDev_Tips
از 1 تا 10 آذر، دیجیپی با 1.2 میلیون سفارش از 21 دسته کالا، رکورد فروش ۳.۸ همتی توسط کاربران رو ثبت کرده🫣
نسبت به همین بازه تو سال قبلی، رشد ۱۵۳% درصدی داشته (حدود 2.5 برابر شده)
این آمار فقط برای دیجیپی هست که یه پلتفرم اعتباری(قسطی) از زیر مجموعهی دیجیکالاست و با تپسی هم همکاری داره!
منبع
🆔 @AndroidDev_Tips
دیجیاتو
بیش از ۳.۸ همت فروش در بلکفرایدی دیجیپی
بیش از ۵۰ میلیون بازدید از سوپراپلیکیشن دیجیپی در بازه بلکفرایدی صورت گرفته است
👍2
تجربیات یک برنامهنویس اندروید
بیش از ۳.۸ هزار میلیارد تومان(همت) فروش در Black Friday فقط در دیجیپی😳 از 1 تا 10 آذر، دیجیپی با 1.2 میلیون سفارش از 21 دسته کالا، رکورد فروش ۳.۸ همتی توسط کاربران رو ثبت کرده🫣 نسبت به همین بازه تو سال قبلی، رشد ۱۵۳% درصدی داشته (حدود 2.5 برابر شده) این…
کل فروش دیجیکالا توی این 10 روز، با 3.8 همت فروش اعتباری رو حدودا 15 همت برآورد کردن😳
15,000,000,000,000 = 1.5×10¹¹
پشمـــــام😱
به ازای هر سفارش، دیجیکالا 9 الی 12 درصد از تأمینکننده یا همون فروشگاه، کمیسیون میگیره؛ فقط 10% به صورت میانگین حساب کنیم، 1.5 همت سود دیجیکالا شده فقط🤪
هزینهی ارسال و پردازش رو هم که از تأمین کننده میگیره
15,000,000,000,000 = 1.5×10¹¹
پشمـــــام😱
به ازای هر سفارش، دیجیکالا 9 الی 12 درصد از تأمینکننده یا همون فروشگاه، کمیسیون میگیره؛ فقط 10% به صورت میانگین حساب کنیم، 1.5 همت سود دیجیکالا شده فقط🤪
هزینهی ارسال و پردازش رو هم که از تأمین کننده میگیره
🎮 اپلیکیشن "گیم سنتر هوشمند"
> اولین اتوماسیون مدیریت گیمنت و کافه بردگیم
👤 ساخت پروفایل برای مشتریان ثابت
📃 حسابداری و محاسبهی دقیق فاکتورها
📊 آمارگیری دقیق و کاربردی
🔒 امن و غیر قابل نفوذ
🚶 رصد و تحلیل رفتار مشتریان
نسخهی 1.0.1 پایدار:
http://cafebazaar.ir/app/?id=ir.lifeplus.gamenethelper&ref=share
> اولین اتوماسیون مدیریت گیمنت و کافه بردگیم
👤 ساخت پروفایل برای مشتریان ثابت
📃 حسابداری و محاسبهی دقیق فاکتورها
📊 آمارگیری دقیق و کاربردی
🔒 امن و غیر قابل نفوذ
🚶 رصد و تحلیل رفتار مشتریان
نسخهی 1.0.1 پایدار:
http://cafebazaar.ir/app/?id=ir.lifeplus.gamenethelper&ref=share
👍2
تجربیات یک برنامهنویس اندروید
Photo
طراحی Ui با همکاری 'خانم محمودی' انجام شده
📱 آیکون اصلی و آیکونهای پایین صفحه(باتم نویگیشن) به سختی با کوپایلوت و ترکیب جمنای ساخته شدن و نیاز به کلی ادیت داشتن که برای هر کدومشون یکی دو روز وقت گذاشتم😅
برای Ux اپلیکیشن از چند تا گیمنت مشاوره گرفتم و با تجربهی فعالیت خودم توی کافهبردگیم ترکیب کردم😉🤝
هدف دارم باشگاههای تنیس و بولینگ رو هم ساپورت کنم
📱 آیکون اصلی و آیکونهای پایین صفحه(باتم نویگیشن) به سختی با کوپایلوت و ترکیب جمنای ساخته شدن و نیاز به کلی ادیت داشتن که برای هر کدومشون یکی دو روز وقت گذاشتم😅
برای Ux اپلیکیشن از چند تا گیمنت مشاوره گرفتم و با تجربهی فعالیت خودم توی کافهبردگیم ترکیب کردم😉🤝
هدف دارم باشگاههای تنیس و بولینگ رو هم ساپورت کنم
👍3
♻️ به پیشنهاد یک عزیز فرایند صفحهی فاکتورها کلاً قراره عوض بشه و حدوداً تو نسخهی 1.2.0 یا 1.3.0 فکر کنم بتونیم اجراش کنیم(فقط طراحیش تموم شده)
🌐 همهی اطلاعات توسط ORM دوستداشتنی Room ، توی دیتابیس SQLite و داخل دستگاه کاربر ذخیره میشه(کش میشه)
پیشانداز اولیهی ذهنیمون سازگاری و ریسپانسیو کردن اپلیکیشن برای هر دستگاه هست و سپس قرار دادن تم لایت به اپلیکیشن هست(برای کسایی که دوستش دارن)
بعد از این دو مورد، صفحهی فاکتورها به صفحهی حسابداری تبدیل شده و کلی قابلیت جدید اضافه میشه🙂
🌐 همهی اطلاعات توسط ORM دوستداشتنی Room ، توی دیتابیس SQLite و داخل دستگاه کاربر ذخیره میشه(کش میشه)
پیشانداز اولیهی ذهنیمون سازگاری و ریسپانسیو کردن اپلیکیشن برای هر دستگاه هست و سپس قرار دادن تم لایت به اپلیکیشن هست(برای کسایی که دوستش دارن)
بعد از این دو مورد، صفحهی فاکتورها به صفحهی حسابداری تبدیل شده و کلی قابلیت جدید اضافه میشه🙂
👍3
هدف کلی ما با شروع این اپلیکیشن، ساخت یک سوشال خوب گیم هست که در سطح کل ایران فعالیت بکنه . . .
به عبارتی فقط توی حوزهی مدیریت گیمسنتر و کسب و کارهای دیگه نمیمونیم و قراره خیلی بزرگتر فعالیت عظیمی رو شروع کنیم😉
به عبارتی فقط توی حوزهی مدیریت گیمسنتر و کسب و کارهای دیگه نمیمونیم و قراره خیلی بزرگتر فعالیت عظیمی رو شروع کنیم😉
👍2