PDA

View Full Version : مخفی کردن دسته ای آیتم ها



Mostafa_
یک شنبه 22 بهمن 1396, 16:40 عصر
سلام خدمت دوستان
وقت بخیر
یه سوال داشتم

من یه اسپینر دارم که مقدارهای 1 تا20 توشه
به تعداد عددها،،، CardView دارم

حالا یه case نوشتم که اگه مثلا عدد 1 انتخاب شد CardView شماره 1 Visible بشه و بقیشون Invisible

حالا مشکلی که این وسط هست اینه که در هر حالت،،، من باید توی هر case حدود 20 خط کد بنویسم که فلان cardview رو فعال کن و دیگری ها رو غیر فعال

راهی هست که بگیم همه cardview ها غیرفعال شه بجز فلان cardview ؟؟؟


ممنون

Nevercom
یک شنبه 22 بهمن 1396, 21:09 عصر
الان شما یه سری عدد ترتیبی دارید که هرکدوم به یه ویو خاص اشاره می کنن، بنظر میاد که آرایه میتونه گزینه خوبی باشه.

یه آرایه بسازید و توش CardView ها رو به ترتیب قرار بدید. هر عددی انتخاب شد تو یه حلقه کل آرایه رو پیمایش می کنید و هرکدوم از ویو ها رو از آرایه استخراج می کنید و Visibilityشون رو تغییر میدید، همه مخفی میشن بجز اونی که اندیسش در آرایه برابر با عدد مدنظر - 1 هست.

اگر هم از ButterKnife (http://jakewharton.github.io/butterknife/) استفاده می کنید (که من خیلی دوسش دارم)، متدی داره بنام apply که روی لیستی از Viewها اجرا میشه و میتونه یه پارامتر از همه‌ی اونا رو با هم تغییر بده (مثل Visibility)

Mostafa_
سه شنبه 24 بهمن 1396, 18:39 عصر
الان شما یه سری عدد ترتیبی دارید که هرکدوم به یه ویو خاص اشاره می کنن، بنظر میاد که آرایه میتونه گزینه خوبی باشه.

یه آرایه بسازید و توش CardView ها رو به ترتیب قرار بدید. هر عددی انتخاب شد تو یه حلقه کل آرایه رو پیمایش می کنید و هرکدوم از ویو ها رو از آرایه استخراج می کنید و Visibilityشون رو تغییر میدید، همه مخفی میشن بجز اونی که اندیسش در آرایه برابر با عدد مدنظر - 1 هست.

اگر هم از ButterKnife (http://jakewharton.github.io/butterknife/) استفاده می کنید (که من خیلی دوسش دارم)، متدی داره بنام apply که روی لیستی از Viewها اجرا میشه و میتونه یه پارامتر از همه‌ی اونا رو با هم تغییر بده (مثل Visibility)



سلام ممنون از راهنماییت
میشه بیشتر توضیح بدی
راستش نمیدونم چطور باید این مدل ارایه رو تعریف کنم...
بعدشم چطوری باید مخفی و نمایش بدم.. :D

Nevercom
سه شنبه 24 بهمن 1396, 19:16 عصر
خب الان مگه شما نمیگی من CardView ها همین الانشم مخفی می کنم، اما چون تو Switch هست، باید واسه هر بلاک Case کلی خط کد تکراری بنویسم ؟

پس از الان شما می‌دونی چطور باید Visibility رو تغییر بدی، فقط می‌خوای به روش بهتری انجامش بدی

شما بیا یه آرایه درست کن از CardViewها (اونا رو قبلن با findViewById پیدا کردی رو ریختی تو یه متغیر)

CardView[] cvList = {cv1, cv2,....};

بعد مثلن میخای سومی رو نشون بدی باقی رو مخفی کنی، یه حلقه for بساز از 0 تا cvList.length (طول آرایه)
تو حلقه چک می کنی اگه شمارنده حلقه (i) برابر با اون عدد مدنظر شما بود (عدد شما منهای ۱ چون وقتی میگی اولی، یعنی اندیس 0 در آرایه)، VISIBLEش کن، در غیراینصورت INVISIBLE

مهم نیست کدوم خصوصیت رو میخوای تغییر بدی، فقط کافیه شئ رو از آرایه استخراج کنی و متد موردنظر رو روش صدا بزنی


int position = 5;
for (int i = 0; i < cvList.length; i++) {


if (i == position - 1) {
cvList[i].setVisibility(View.VISIBLE);
} else {
cvList[i].setVisibility(View.INVISIBLE);
}
}

Mostafa_
سه شنبه 24 بهمن 1396, 19:26 عصر
خب الان مگه شما نمیگی من CardView ها همین الانشم مخفی می کنم، اما چون تو Switch هست، باید واسه هر بلاک Case کلی خط کد تکراری بنویسم ؟

پس از الان شما می‌دونی چطور باید Visibility رو تغییر بدی، فقط می‌خوای به روش بهتری انجامش بدی

شما بیا یه آرایه درست کن از CardViewها (اونا رو قبلن با findViewById پیدا کردی رو ریختی تو یه متغیر)

CardView[] cvList = {cv1, cv2,....};

بعد مثلن میخای سومی رو نشون بدی باقی رو مخفی کنی، یه حلقه for بساز از 0 تا cvList.length (طول آرایه)
تو حلقه چک می کنی اگه شمارنده حلقه (i) برابر با اون عدد مدنظر شما بود (عدد شما منهای ۱ چون وقتی میگی اولی، یعنی اندیس 0 در آرایه)، VISIBLEش کن، در غیراینصورت INVISIBLE

مهم نیست کدوم خصوصیت رو میخوای تغییر بدی، فقط کافیه شئ رو از آرایه استخراج کنی و متد موردنظر رو روش صدا بزنی


int position = 5;
for (int i = 0; i < cvList.length; i++) {


if (i == position - 1) {
cvList[i].setVisibility(View.VISIBLE);
} else {
cvList[i].setVisibility(View.INVISIBLE);
}
}




بسیار عالی
دستت درد نکنه
یه چیزی یادم دادی که خیییییلی کارم جلو میوفته
ممنونم :)