PDA

View Full Version : روش ایجاد آیکن‌های ثابت در پایین تمام صفحات مثل اینستاگرام



m_feyz
جمعه 28 مهر 1396, 11:16 صبح
با سلام به تمامی دوستان
تو اینستاگرام چند تا آیکن پایین صفحه است که همیشه ثابته و با اینتخاب اونها میشه بین اکتیویتی‌ها جابه‌جا بشیم.
تا اونجایی که من یاد گرفتم وقتی بین اکتیویتی‌ها جابه‌جا میشیم، کل صفحه تغییر می‌کنه و چیزی ثابت نمی‌مونه.
برنامه‌هایی مثل اینستاگرام از چه روشی برای این آیکن‌های ثابت پایین صفحه استفاده می‌کنند که بین همه صفحات ثابت می‌مونه؟
ممنون از همه دوستان

hharddy
جمعه 28 مهر 1396, 18:46 عصر
دکمه های پایین صفحه bottom navigation هستند علت ثاتب بودن صفحه هم استفاده از Fragment هست

m_feyz
جمعه 28 مهر 1396, 20:09 عصر
دکمه های پایین صفحه bottom navigation هستند علت ثاتب بودن صفحه هم استفاده از Fragment هست

خیلی ممنون از پاسخ شما. خب می‌دونیم که تقریبا تمام صفحات اینستاگرام با همین bottom navigation ها بازدید می‌شوند. یعنی در این صورت تمام اینستاگرام فقط با یک اکیتیویتی ساخته شده که داخل اون چندین Fragment هست؟
یعنی تمام صفحات اینستاگرام در حقیقت Fragment هستند نه Activity؟
این برنامه رو سنگین نمیکنه و اشکالی پیش نمیاره؟
نمیشه با استفاده از bottom navigation بین اکتیویتی‌ها جابه‌جا شد و نه Fragment ها؟
ببخشید سوالاتم زیاد شد!

hharddy
شنبه 29 مهر 1396, 09:45 صبح
سلام خب ما که به سورس اینستاگرام دسترسی نداریم بدونیم دقیقا چیکار کردن ولی 99 درصد از فرگمنت استفاده شده.
شما با پیاده سازی bottom nav برای هر ایتم رویداد کلیک تعریف میکنید میخواد این رویداد رفتن به فرگمنت یا اکتیویتی دیگری باشه یا اصلا نمایش دیالوگ یا toast همه چیز دست خودتون هست.

kamal70
شنبه 29 مهر 1396, 17:33 عصر
در ادامه همین سوال من bottom navigationview را با فرگمنت پیاده سازی کردم فقط وقتی بین فرگمنت ها جابجا میشم هردفعه از اول لود میشن مثل اینستاگرام تغییرات بازدید قبل رو نگه نمی داره چطور مثل اینستاگرام درست کنیم،؟

amirxbest
شنبه 29 مهر 1396, 18:05 عصر
منظورتون از تغیرات بازدید قبل دقیقا چی هست؟؟؟

kamal70
شنبه 29 مهر 1396, 19:00 عصر
در فرگمنت یه لیست ویو داریم مثلا یبار تا آیتم ده اسکرول کردیم دفعه بعد که لیست ویو را باز می کنیم ادامه اسکرول ده به بعد را نمایش بده دوباره به اول لیست برنگرده

hharddy
شنبه 29 مهر 1396, 20:38 عصر
در ادامه همین سوال من bottom navigationview را با فرگمنت پیاده سازی کردم فقط وقتی بین فرگمنت ها جابجا میشم هردفعه از اول لود میشن مثل اینستاگرام تغییرات بازدید قبل رو نگه نمی داره چطور مثل اینستاگرام درست کنیم،؟

بستگی به کد هاتون داره شاید هر بار دارید new میکنید فرگمنت هارو. یا شاید دارید از دستور replace استفاده میکنید این کار هربار فرگمنت جدید میسازه بجاش از show,hide استفاده کنید. نکته این که لطفا سوالتون و تاپیک جداگانه بپرسید تا سوال دوستتون منحرف نشه.

m_feyz
چهارشنبه 03 آبان 1396, 15:55 عصر
بستگی به کد هاتون داره شاید هر بار دارید new میکنید فرگمنت هارو. یا شاید دارید از دستور replace استفاده میکنید این کار هربار فرگمنت جدید میسازه بجاش از show,hide استفاده کنید. نکته این که لطفا سوالتون و تاپیک جداگانه بپرسید تا سوال دوستتون منحرف نشه.

سلام مجدد.
ممنون از راهنماییهاتون
خب اگه هر بار new نکنیم به جاش باید چیکار کنیم؟
مثلاً یک صفحه داریم با دو تا دکمه. اولی لیست محصول ها رو نشون می‌ده و دومی میره توی صفحه جستجو. التبه هر دو با فراگمنت است.
حالا برای هر دکمه دستوری مثل زیر داریم:


btnOne = (Button) findViewById(R.id.btn_a);
btnTwo = (Button) findViewById(R.id.btn_b);

btnOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

FrgOne frg1 = new FrgOne();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frg_holder, frg1);
transaction.addToBackStack(null);
ft.commit();

}
});

btnTwo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

FrgTwo frg2 = new FrgTwo();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frg_holder, frg2);
transaction.addToBackStack(null);
ft.commit();

}
});


حتی برای رفتن به history از backstack هم استفاده شده.
ولی وقتی حتی دکمه back رو می‌زنم تا فرگمنت قبلی رو نشون بده دوباره از اول ایجاد میشه و به ابتدای صفحه میره
توی این کدها به جای new FrgOne باید چی گذاشت تا هنگام بازگشت به فرگمنت اول، فرگمنت دوباره ایجاد نشه بلکه همون محتوای قبلی رو با همون موقعیت قبلی نشون بده