View Full Version : مشکل در ساخت View به محض اسکرول در ViewPager مشابه وایبر و بازار
slr560
سه شنبه 11 فروردین 1394, 15:58 عصر
سلام دوستان
چند وقتی هست مشکل لگ در انتخاب آیتم های نویگیشن اذیتم میکنه که هنوزم رفع نشده
من آیتم های منوی نویگیشنم ViewPager هست . مشکل اینجاش وقتی ایتم نویگیشن رو انتخاب میگنی همیشه یه مکس کوتاه میکنه و بعد صفحه باز میشه . چون همه ی ویو هارو داره باهم یه جا میسازه این مشکل پیش میاد
اگه دیده باشید طراحی برنامه های مثل بازار یا وایبر یا گوگل پلی این مشکل رو رفع کردن . یعنی به محص اسکرول یه پروگرس داخل صفحه باز میشه و بعد اینکه ویو ساخته شد نشون داده میشه
کسی میدونه ای کار به چه صورت انجام میشه ؟؟؟؟ یا نمونه کدی نداره؟
slr560
سه شنبه 11 فروردین 1394, 19:04 عصر
کسی اطلاعی نداره؟
storm_saeed
سه شنبه 11 فروردین 1394, 23:49 عصر
راستش من منظورتو نفهمیدم میشه یکم دقیق تر مشکلتو بگی ؟
slr560
سه شنبه 11 فروردین 1394, 23:52 عصر
راستش من منظورتو نفهمیدم میشه یکم دقیق تر مشکلتو بگی ؟
وایبر رو باز کن و انگشتتو بکش سمت راست تا صفحه کناریش باز بشه
اگه دقت کنی اول یه پروگرس وسط صفحه اجرا میشه و کمتر ۱ثانیه اون ویو ساخته میشه
توی بازار و گوگل پلی هم ویو پیجراشون به این شکل هست.
این کار چجوری انجام میگیره؟
haniiii
چهارشنبه 12 فروردین 1394, 00:08 صبح
وایبر رو باز کن و انگشتتو بکش سمت راست تا صفحه کناریش باز بشه
اگه دقت کنی اول یه پروگرس وسط صفحه اجرا میشه و کمتر ۱ثانیه اون ویو ساخته میشه
توی بازار و گوگل پلی هم ویو پیجراشون به این شکل هست.
این کار چجوری انجام میگیره؟
من خودم تست نکردم ولی فکر میکنم با این بشه یه کارایی کرد :
public class MyFragment extends Fragment {
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) { }
else { }
}
}
storm_saeed
چهارشنبه 12 فروردین 1394, 01:00 صبح
وایبر رو باز کن و انگشتتو بکش سمت راست تا صفحه کناریش باز بشه
اگه دقت کنی اول یه پروگرس وسط صفحه اجرا میشه و کمتر ۱ثانیه اون ویو ساخته میشه
توی بازار و گوگل پلی هم ویو پیجراشون به این شکل هست.
این کار چجوری انجام میگیره؟
تو وایبر که یه همچین چیزی ندیدم
ولی در کل برای اینکار نیاز به یه ترد اسنکرون داری که اول به یوزر یه پروگرس بار نشون بدی و بری دیتا رو بیگیری بعد اینکه دیتا رو گرفتی لیست ویو رو بسازی
مثلا بازار اینطوریه که میره یه جیسون میگیره بعد از اینکه گرفتش لیست ویو رو اپدیت میکنه
slr560
چهارشنبه 12 فروردین 1394, 01:06 صبح
تو وایبر که یه همچین چیزی ندیدم
ولی در کل برای اینکار نیاز به یه ترد اسنکرون داری که اول به یوزر یه پروگرس بار نشون بدی و بری دیتا رو بیگیری بعد اینکه دیتا رو گرفتی لیست ویو رو بسازی
مثلا بازار اینطوریه که میره یه جیسون میگیره بعد از اینکه گرفتش لیست ویو رو اپدیت میکنه
من آیتم های صفحه هام لیست نیست .
از یکی از دوستان پرسیدم گفتن توی doInBackground نمیشه به view ها دسترسی داشت .
slr560
چهارشنبه 12 فروردین 1394, 01:07 صبح
من خودم تست نکردم ولی فکر میکنم با این بشه یه کارایی کرد :
public class MyFragment extends Fragment {
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) { }
else { }
}
}
یه مقدار بیشتر توضیح بدید در رابطه با این متد؟؟
دقیقا چیکار میکنه؟؟؟
storm_saeed
چهارشنبه 12 فروردین 1394, 01:48 صبح
من آیتم های صفحه هام لیست نیست .
از یکی از دوستان پرسیدم گفتن توی doInBackground نمیشه به view ها دسترسی داشت .
چرا میشه تو doInBackground مقدار یه ویو رو تغییر داد اگه تو ترد ui صدا زده شده باشه (runOnUIThread)
کلا نباید تو doInBackground اینکارو کرد چونکه تو ترد UI نیست برای اینکار باید از onPreExecute و onPostExecute استفاده کرد
الان جواب سوال شما استفاده از ترد های انسکرونه ولی چون شما دقیق نگفتید چیکار میخواید بکنید نمیشه راه حل صحیح تر داد
من خودم تست نکردم ولی فکر میکنم با این بشه یه کارایی کرد :
public class MyFragment extends Fragment {
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) { }
else { }
}
}
این تابع صرفا یه پارامتری میفرسته که میگه Ui برای یوزر visible هست یا نه . روش صحیحی برای اینکار نیست ولی راه حل کلیش انطوریه
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getView() != null) {
//fetchdata then isViewShown = true
} else {
isViewShown = false;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (!isViewShown) {
//fetchdata
}
که اصلا روش درستی نیست
slr560
چهارشنبه 12 فروردین 1394, 11:57 صبح
ببینید دوستان طرح کلی یکی از منوی های NavigationDrawer من اینجوریه . مشکل اصلی اینه که وقتی ParentFragment اجرا میشه یه مکس کوچیک ایجاد میشه که زیاد جالب نیس.
بعد اینکه ParentFragment ایجاد شد میاد همزمان ۴تا پیج های خودش رو میسازه و برای همین اون مکس کوچیک رو میکنه
من میخوام اینجو نباشه . میخوام به محض اینکه ParentFragment اجرا شد فقط page1 ویو پیجر اجرا بشه و اون ۳تا ساخته نشن . حالا با اسکرول به راست page2 یه پرگرس بیوفته وسطش و بعد مثلا ۱ ثانیه ساخته بشه .
به متد setOffscreenPageLimit هم مربوط نیس . خواهشا یه راه حلی بهم بدین که این مکس کردن از بین بره . نرم کار کنه وقتی روی آیتم نویگیشن کلیک میکنم
129945
slr560
چهارشنبه 12 فروردین 1394, 14:34 عصر
مشکل رو با یه تایمر ساده حل کردم
با تشکر از دوستان
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.