ورود

View Full Version : یک اکتیویتی ولی 1000 فرگمنت!



MSHService
جمعه 09 آبان 1393, 10:19 صبح
درود دوستان

من یه اپ دارم مینویسم که توش فقط یه اکتیویتی دارم و بقیش همش فرگمنته.

در هر لحظه حدکثر اطلاعات 3 فرگمنت توی رم لود میشه نه بیشتر و اونم مربوط به استیت اداپتره ViewPagerم هست.

میخواستم نظرتون رو بدونم ، کاری که من کردم درسته؟

با سپاس :)

StoPpeR
جمعه 09 آبان 1393, 12:09 عصر
نمی دونم منظور دقیقتون از درست بودن چیه چون کلا هر کدی که بتونه اون خواسته برنامه نویس رو اجرا کنه خب میشه بهش گفت درست
اما اگه منظورتون اینه که آیا این بهترین راهه یا نه خب بستگی به اپلیکیشنتون و همینطور توانایی های خودتون داره
داشتن فقط یه اکتیویتی و صد ها فرگمنت کد رو خیلی شلوغ میکنه و می تونه کار کدنویسیش و همینطور دیباگ کردنش رو سخت تر کنه ولی خب ازون طرف برای سایز های مختلف صفحه بهترین همخوانی رو ایجاد می کنه
در کل می گم بستگی به خودتون داره که از کدوم روش استفاده کنین

haniiii
جمعه 09 آبان 1393, 12:22 عصر
توضیحات کمی دادین ... با این توضیحات به نظر میرسه خیلی اشتباه باشه ... بهتره از تشابه بودن فرگمتت ها استفاده کنی و تعدادشون رو کم کنی

MSHService
جمعه 09 آبان 1393, 13:19 عصر
بیشتر توضیح میدم.
من کلا 10 تا فرگمنت به صورت لایاوتی دارم و بقیه رو توی برنامم میسازم.

اما نه هر باز 1000 تا. هر باز حداکثر 3 تا چوه اداپترم هر بار 3 تا لود میکنه

برنامه به اینصورته که باید یه لیست بزرگ رو توی ViewPager نشون بده که همینطور که در بالا گفتم اداپترم استیت اداپتره.

اصلا شلوغ نیست چون در مجموع 10 تا لای اوت بیشتر ندارم.

من با json اطلاعات رو میخونم. و در اداپتر فرگمنتم هر وقت نیاز باشه اون فرگمنت رو میسازم. منظورم این بود :)

storm_saeed
جمعه 09 آبان 1393, 13:42 عصر
کارتون صد در صد درسته :)
کلا هر چقدر از اکتیویتی کمتر استفاده بشه بهتره

StoPpeR
جمعه 09 آبان 1393, 13:55 عصر
کلا هر چقدر از اکتیویتی کمتر استفاده بشه بهتره

مخالفم...
دلیلتون؟ (با رسم شکل توضیح دهید :لبخند:)

MSHService
جمعه 09 آبان 1393, 14:17 عصر
دوستان چکار کنم که وقتی کاربر دکمه Back رو زد بیرون نیاد از برنامه؟!!

از backStack چطور و کجا باید استفاده کنم؟!

storm_saeed
جمعه 09 آبان 1393, 14:27 عصر
مخالفم...
دلیلتون؟ (با رسم شکل توضیح دهید :لبخند:)
:لبخند:
http://blog.pluralsight.com/android-fragments
http://stackoverflow.com/questions/10478233/android-need-some-clarifications-of-fragments-vs-activities-and-views
http://stackoverflow.com/questions/20306091/dilemma-when-to-use-fragments-vs-activities
http://stackoverflow.com/questions/15318518/android-activity-vs-fragmentactivity

دلیل عمده به نظر من تشابه و برتری lifecycle فرگمنت ها نسبت به اکتیویتی هاست و خب به طبع انعطاف پذیری بیشتری رو با فرگمنت ها میشه داشت . طراحی ماژولاری میتونیم با فرگمنت ها داشته باشیم یعنی تو اکتیویتی های مختلف میشه از یه فرگمنت استفاده کردیا از چند فرگمنت تو یه اکتیویتی ، به راحتی اضافه و پاک میشن و انتقال بین اون ها سرعت بیشتری داره ( همین سرعت نکته ای هس که من رو فرگمنت ها سوییچ کردم :) یادمه یه برنامه ای میزدم چون لیوت سنگین بود سوییچ کردن بین اکتیویتی ها با تاخییر زمانی رخ میداد ولی فرگمنت ها این مشکل رو حل کرد و اخر سر برنامم شد 16 فرگمنت و یک اکتیویتی) ذخیره سازیشون رو استکی که دارن خیلی هوشمند تره

و درکل چیز بهتری نسبت به اکتیویتی هست و تنها ایرادشون اینه یکم کار باهاشون سخته و حالت خاص خیلی دارن


QUOTE=StoPpeR;2126220]داشتن فقط یه اکتیویتی و صد ها فرگمنت کد رو خیلی شلوغ میکنه و می تونه کار کدنویسیش و همینطور دیباگ کردنش رو سخت تر کنه ولی خب ازون طرف برای سایز های مختلف صفحه بهترین همخوانی رو ایجاد می کنه
[/QUOTE]
]برا دیباگ کردن هم مشکلی پیش نمیاد اگه کد ها طبق اصول زده شده باشن هرچقدر هم برنامه شامل کلاس های مختلف باشه باز به راحتی میشه دیباگ کرد

storm_saeed
جمعه 09 آبان 1393, 14:30 عصر
دوستان چکار کنم که وقتی کاربر دکمه Back رو زد بیرون نیاد از برنامه؟!!

از backStack چطور و کجا باید استفاده کنم؟!



onBackPress رو override کنیدش
منظورتون فرگمنت هاست دیگه ؟

MSHService
جمعه 09 آبان 1393, 14:47 عصر
اره منظورم فرگمنت هاست.

دوست عزیز این لینکایی که فرستادی چه ربطی به بک استک داشتن ؟! :گریه:

توی فرگمنتهام اونو ان رو اورراید کنم تمومه؟!! دیگه کاری نمیخواد کنم؟!! :عصبانی++:

storm_saeed
جمعه 09 آبان 1393, 15:00 عصر
اره منظورم فرگمنت هاست.

دوست عزیز این لینکایی که فرستادی چه ربطی به بک استک داشتن ؟! :گریه:

توی فرگمنتهام اونو ان رو اورراید کنم تمومه؟!! دیگه کاری نمیخواد کنم؟!! :عصبانی++:




توجه کنید میبینید که لینک رو برای اون یکی دوستمون گذاشتم

نه ببینید فرض کنید چندتا فرگمنت تو یه اکتیویتی هستن
A-> اکتیویتی مون
B-> فرگمنت صفحه اصلی
c-> یه فرگمنت همیجوری
حالا میخوایم اگه از C یوزر بک رو زد بره به B و اگه از B بک رو زد از برنامه بیرون بشه

حالا این کارهارو انجام بدید
تو اکتیویتی برای اینکه فرگمنت B رو صدا بزنید اینطوری صداش بزنید
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, new B(), FRAGMENT_TAG).addToBackStack(null)
.commit();

و اکتیویتی onBackPressed رو اورراید کنید
@Override
public void onBackPressed() {
super.onBackPressed();
}



حالا این کد رو هم ته onCreate اضافه کنید


FragmentManager fm = getSupportFragmentManager();


fm.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {


if (getSupportFragmentManager().getBackStackEntryCoun t() == 0) finish();


}
});
این میگه اگه تو بک استک هیچی فرگمنت نبود از برنامه بیا بیرون یعنی موقعی که تو B بک رو زدیم
حالا تو B هم به همین شکل


getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, new C(), FRAGMENT_TAG).addToBackStack(null)
.commit();



C رو صدا بزنید حالا اگه تو C بک بزنید میرید تو B تو B بک بزنید از برنامه میاید بیرون

MSHService
جمعه 09 آبان 1393, 15:15 عصر
از زحماته شما دوست عزی و گرانقدر کمال تشکر را دارم :قلب: :لبخند:

StoPpeR
جمعه 09 آبان 1393, 20:11 عصر
:لبخند:
http://blog.pluralsight.com/android-fragments
http://stackoverflow.com/questions/10478233/android-need-some-clarifications-of-fragments-vs-activities-and-views
http://stackoverflow.com/questions/20306091/dilemma-when-to-use-fragments-vs-activities
http://stackoverflow.com/questions/15318518/android-activity-vs-fragmentactivity

دلیل عمده به نظر من تشابه و برتری lifecycle فرگمنت ها نسبت به اکتیویتی هاست و خب به طبع انعطاف پذیری بیشتری رو با فرگمنت ها میشه داشت . طراحی ماژولاری میتونیم با فرگمنت ها داشته باشیم یعنی تو اکتیویتی های مختلف میشه از یه فرگمنت استفاده کردیا از چند فرگمنت تو یه اکتیویتی ، به راحتی اضافه و پاک میشن و انتقال بین اون ها سرعت بیشتری داره ( همین سرعت نکته ای هس که من رو فرگمنت ها سوییچ کردم :) یادمه یه برنامه ای میزدم چون لیوت سنگین بود سوییچ کردن بین اکتیویتی ها با تاخییر زمانی رخ میداد ولی فرگمنت ها این مشکل رو حل کرد و اخر سر برنامم شد 16 فرگمنت و یک اکتیویتی) ذخیره سازیشون رو استکی که دارن خیلی هوشمند تره

و درکل چیز بهتری نسبت به اکتیویتی هست و تنها ایرادشون اینه یکم کار باهاشون سخته و حالت خاص خیلی دارن



با اینکه فرگمنت برای اکثر کار ها بهتر عمل می کنه مشکلی ندارم ولی با اون جمله هر چی اکتیویتی کمتر بهتر مخالفم
پروژه ای که بالای 200 فرگمنت نیاز داشته باشه (که همشونم قرار باشه قبلش اضافه بشن نه در حین کار) و از api های مختلف مثل گوگل مپ و... استفاده کنه و کل اینا رو بریزیم توی یه اکتیویتی گمون نکنم آنچنان چیز جالبی بشه
ولی خب با کلیت حرفتون موافقم

storm_saeed
جمعه 09 آبان 1393, 21:33 عصر
با اینکه فرگمنت برای اکثر کار ها بهتر عمل می کنه مشکلی ندارم ولی با اون جمله هر چی اکتیویتی کمتر بهتر مخالفم
پروژه ای که بالای 200 فرگمنت نیاز داشته باشه (که همشونم قرار باشه قبلش اضافه بشن نه در حین کار) و از api های مختلف مثل گوگل مپ و... استفاده کنه و کل اینا رو بریزیم توی یه اکتیویتی گمون نکنم آنچنان چیز جالبی بشه
ولی خب با کلیت حرفتون موافقم
کلا باید تا جای ممکن از اکتیویتی کم استفاده کرد(نه اینکه کلا یه اکتیویتی باشه) مثلا سری لایبرری ها هستن که کلا باید تو یه اکتیویتی جدا باشه وگرنه کار رو بهم میریزن