pfrproject 5 ارسال شده در ۱۷ مهر ۱۳۹۶ گزارش اشتراک گذاری ارسال شده در ۱۷ مهر ۱۳۹۶ (ویرایش شده) سلام خدمت کاربران گرامی انجمن p30droid دوستان بنده توی viewpager شش تا فرگمنت دارم حالا می خواهم کاربر وقتی تب ها رو می بینه به ترتیب لود بشه و بعدن کش هم بشه و می دونم میشه از viewPager.setOffscreenPageLimit(6); استفاده کنم. اما این کار اشتباه هست چون تعداد 6 تا requst به سرور ارسال میشه و باعث میشه jsons api من خیلی دیر اطلاعات رو دریافت کنه چطور میشه کاری کرد که وقتی کاربر فرگمنت ها رو می بینه به ترتیتب لود بشه و بعدن کش هم بشه و فقط یک requst ارسال بشه به سمت سرور مثل اپلیکیشن دیجی استایل که وقتی تب ها رو مشاهده می کنید بعدن کش میشه لطفا اگر کسی چیزی میدونه لطفا کمک کنه سپاس ویرایش شده ۱۷ مهر ۱۳۹۶ توسط pfrproject نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Farzad Sarseifi 575 ارسال شده در ۱۷ مهر ۱۳۹۶ گزارش اشتراک گذاری ارسال شده در ۱۷ مهر ۱۳۹۶ به اینصورت بنویسید public class MainActivity extends AppCompatActivity { private TabLayout tabLayout; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.viewpager); setupViewPager(viewPager); tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); tabLayout.setOnTabSelectedListener(onTabSelectedListener(viewPager)); } private TabLayout.OnTabSelectedListener onTabSelectedListener(final ViewPager viewPager) { return new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }; } private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new OneFragment(), "ONE"); adapter.addFragment(new TwoFragment(), "TWO"); adapter.addFragment(new ThreeFragment(), "THREE"); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); onTabSelectedListener(viewPager); } class ViewPagerAdapter extends FragmentPagerAdapter { private final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } } 1 نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
pfrproject 5 ارسال شده در ۱۷ مهر ۱۳۹۶ مالک گزارش اشتراک گذاری ارسال شده در ۱۷ مهر ۱۳۹۶ در 29 دقیقه قبل، Farzad Sarseifi گفته است : به اینصورت بنویسید public class MainActivity extends AppCompatActivity { private TabLayout tabLayout; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.viewpager); setupViewPager(viewPager); tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); tabLayout.setOnTabSelectedListener(onTabSelectedListener(viewPager)); } private TabLayout.OnTabSelectedListener onTabSelectedListener(final ViewPager viewPager) { return new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }; } private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new OneFragment(), "ONE"); adapter.addFragment(new TwoFragment(), "TWO"); adapter.addFragment(new ThreeFragment(), "THREE"); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); onTabSelectedListener(viewPager); } class ViewPagerAdapter extends FragmentPagerAdapter { private final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } } متاسفانه این ها نحوه پیاده سازی هست که بنده با پیاده سازی مشکلی ندارم و کامل هم این مورد پیاده کرده ام. ولی مشکل بنده این هست چطور توی viewPager.setOffscreenPageLimit(3); به صورت دستی محدود نکنم یعنی منظور هر فرگمنت رو که میبینه یک دونه به مقدار اندیس limit اضافه بشه و همون فرگمنتی که دیده شده دیگه مثل اپلیکیشن دیجی استایل باقی بمونه توی مموری و حالا دوباره اگر فرگمنت دیگه ای توی viewpager دید دوباره یک مقدار limit بشه مثلا من شش تا فرگمنت دارم و وقتی برنامه من اجرا میشه میگیم 3 تا فرگمنت رو توی حافظه نگه دار viewPager.setOffscreenPageLimit(3); حالا باید به مقدار 3 باز اضافه بشه اما چطور چون فقط 3 تا فرگمنت رو نگاه می داره و بقیه دوباره با برگشت به عقب refresh میشن. سورس کد بنده : tabLayout = (TabLayout) findViewById(R.id.tablayout); viewPager = (ViewPager) findViewById(R.id.viewpager); fragment_adapter adapter = new fragment_adapter(getSupportFragmentManager()); viewPager.setOffscreenPageLimit(3); viewPager.setDrawingCacheEnabled(true); viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager); viewPager.setCurrentItem(6); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {@Override public void onTabSelected(TabLayout.Tab tab) { } @Override public void onTabUnselected(TabLayout.Tab tab) {} @Override public void onTabReselected(TabLayout.Tab tab) {} }); سورس کد فرگمنت یک و بقیه هم به همین صورت هستن public class fragment_channel extends Fragment{ View view; RecyclerView recyclerView; channel_server jsonrequstvolleyserver; private RecyclerView.LayoutManager layoutManager; private RequestQueue requestQueue; WaveSwipeRefreshLayout mWaveSwipeRefreshLayout; SmoothProgressBar smoothProgressBar; ProgressWheel progressWheel; public fragment_channel() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_recyclerview, container, false); recyclerView = (RecyclerView) view.findViewById(R.id.recymain); mWaveSwipeRefreshLayout = (WaveSwipeRefreshLayout) view.findViewById(R.id.main_swipe); smoothProgressBar = (SmoothProgressBar) view.findViewById(R.id.prograss); progressWheel = (ProgressWheel) view.findViewById(R.id.progress_wheel); recyclerView.setHasFixedSize(true); recyclerView.setItemAnimator(new DefaultItemAnimator()); layoutManager = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(layoutManager); requestQueue = Volley.newRequestQueue(getActivity()); String category = "post"; int check = 0; jsonrequstvolleyserver = new channel_server(getActivity(), category, recyclerView, requestQueue, smoothProgressBar, progressWheel, mWaveSwipeRefreshLayout, check); jsonrequstvolleyserver.cheeck(); jsonrequstvolleyserver.getData(); mWaveSwipeRefreshLayout.setWaveColor(getResources().getColor(R.color.white)); mWaveSwipeRefreshLayout.setOnRefreshListener(new WaveSwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { String category = "post"; int check = 1; jsonrequstvolleyserver = new channel_server(getActivity(), category, recyclerView, requestQueue, smoothProgressBar, progressWheel, mWaveSwipeRefreshLayout, check); jsonrequstvolleyserver.getData(); jsonrequstvolleyserver.cheeck(); } }); return view; } public static fragment_channel newInstance() { Bundle args = new Bundle(); fragment_channel fragment = new fragment_channel(); fragment.setArguments(args); return fragment; } public class fragment_adapter extends FragmentStatePagerAdapter { public fragment_adapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 5: return fragment_channel.newInstance(); case 4: return fragment_group_telegram.newInstance(); case 3: return Frgament_robots.newInstance(); case 2: return fragment_sticker.newInstance(); case 1: return fragment_cahnnel_content.newInstance(); case 0: return fragment_tarfand_telegram.newInstance(); } return null; } @Override public int getCount() { return 6; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 5: return "خبری"; case 4: return "ورزشی"; case 3: return "مهندسی"; case 2: return "ریاضی"; case 1: return "شیمی"; case 0: return "تکنولوژی"; default: return ""; } } } نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Farzad Sarseifi 575 ارسال شده در ۱۸ مهر ۱۳۹۶ گزارش اشتراک گذاری ارسال شده در ۱۸ مهر ۱۳۹۶ از این کتابخونه استفاده کنید https://drive.google.com/file/d/0B3utJsLFk7yKOS1vclV0YTR1NTA/view Steps: 1) First Download the CustomViewPager Class from this link. 2) Use that class like this: In Java: CustomViewPager mViewPager; mViewPager = (CustomViewPager) findViewById(R.id.swipePager); mViewPager.setOffscreenPageLimit(0); In XML: <com.yourpackagename.CustomViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipePager" android:layout_width="match_parent" android:layout_height="match_parent"/> Now only one page will be loaded at once. Thank you. 1 نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .