我正在制作一个应用程序,学生可以在那里查看课程网格.使用json文件检索课程.现在更改日期是通过操作栏中的按钮完成的,但我想让它也可以使用平滑的滑动效果.
唯一需要改变的是左侧滑动的SlectedDate-1 .右侧滑动时的SelectedDate + 1 .
我用ViewPager
s 尝试了但是它没有用,有人知道怎么做吗?也许有3个浏览器的东西?请详细的代码,因为我不太熟悉viewpagers代码!
我已经尝试过使用日期代码的Android ViewPager,但它对我不起作用.
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { public ScreenSlidePagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { String myFormat = "yyyy-MM-dd"; SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US); switch (position) { case 0: // create your dates for the leftmost fragment myCalendar.add(Calendar.DAY_OF_YEAR, -1); final String dateje = sdf.format(myCalendar.getTime()); // mPager.setCurrentItem(1); return ScreenSlidePageFragment.create(dateje); case 1: // create your dates for the center fragment myCalendar.add(Calendar.DAY_OF_YEAR, 0); final String dateje2 = sdf.format(myCalendar.getTime()); //mPager.setCurrentItem(1); return ScreenSlidePageFragment.create(dateje2); case 2: myCalendar.add(Calendar.DAY_OF_YEAR, 1); final String dateje3 = sdf.format(myCalendar.getTime()); //mPager.setCurrentItem(1); return ScreenSlidePageFragment.create(dateje3); } return null; } @Override public int getCount() { return 3; }
我的示例片段
public class ScreenSlidePageFragment extends Fragment { /** * The argument key for the page number this fragment represents. */ public static final String ARG_PAGE = "page"; /** * The fragment's page number, which is set to the argument value for {@link #ARG_PAGE}. */ private int mPageNumber; /** * Factory method for this fragment class. Constructs a new fragment for the given page number. */ public static ScreenSlidePageFragment create(String dateNumber) { ScreenSlidePageFragment fragment = new ScreenSlidePageFragment(); Bundle args = new Bundle(); args.putString(ARG_PAGE, dateNumber); fragment.setArguments(args); return fragment; } public ScreenSlidePageFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPageNumber = 1; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout containing a title and body text. ViewGroup rootView = (ViewGroup) inflater .inflate(R.layout.fragment_screen_slide_page, container, false); String date = this.getArguments().getString(ARG_PAGE); // Set the title view to show the page number. ((TextView) rootView.findViewById(android.R.id.text1)).setText(date); return rootView; } /** * Returns the page number represented by this fragment object. */ public int getPageNumber() { return mPageNumber; } }
Richard Lind.. 11
我已经在不久前解决了这个问题,这个代码有点基于Kuffs的答案,但是我没有在数组中得到日期,因为在阵列中放置很多天是很多性能的.
代码总结 (1)代码生成一个大约10.000页的fragmentpager.在主要活动初始化应用程序设置当前页面中间(5000)
pager.setAdapter(new BootstrapPagerAdapter(getResources(), getSupportFragmentManager())); pager.setCurrentItem(5000, false); pager.post(new Runnable() { public void run() { pager.setCurrentItem(5000, false); } }); pager.getAdapter().notifyDataSetChanged(); pager.setOffscreenPageLimit(0);
bootstrappageradapter中的代码(2)摘要
代码查看用户滚动的位置并立即查找日期
DateTime pagerdate = DateTime.now(TimeZone.getDefault()); DateTime days = pagerdate.plusDays(position - 5000);
例如,用户下一天刷了五天.位置是5003所以总和是5003-5000 = 3天
使用date4j库轻松加上3天(我强烈推荐它!)然后我创建一个包含日期的新片段!
public class BootstrapPagerAdapter extends FragmentPagerAdapter { /** * Create pager adapter * * @param resources * @param fragmentManager */ public BootstrapPagerAdapter(Resources resources, FragmentManager fragmentManager) { super(fragmentManager); } @Override public int getCount() { return 10000; } @Override public int getItemPosition(Object object){ return FragmentStatePagerAdapter.POSITION_NONE; } @Override public Fragment getItem(int position) { DateTime pagerdate = DateTime.now(TimeZone.getDefault()); DateTime days = pagerdate.plusDays(position - 5000); Bundle bundle = new Bundle(); bundle.putString("date", days.format("YYYY-MM-DD").toString()); RoosterFragment roosterFragment = new RoosterFragment(); roosterFragment.setArguments(bundle); return roosterFragment; } }
你可以用更高的数字假装无休止的数字,如年份0001年3999
周围:1.500.000天相信我没有人会一路走到这么远的地方!我尝试了很多无限的例子,但这是我认为唯一的工作实例!
如果它适用于您,请不要害羞地要求更多示例或帮助您的应用程序!
然而,如果某人得到类似真正的infinteviewpager而没有假计数等等,那将会很酷;)
我已经在不久前解决了这个问题,这个代码有点基于Kuffs的答案,但是我没有在数组中得到日期,因为在阵列中放置很多天是很多性能的.
代码总结 (1)代码生成一个大约10.000页的fragmentpager.在主要活动初始化应用程序设置当前页面中间(5000)
pager.setAdapter(new BootstrapPagerAdapter(getResources(), getSupportFragmentManager())); pager.setCurrentItem(5000, false); pager.post(new Runnable() { public void run() { pager.setCurrentItem(5000, false); } }); pager.getAdapter().notifyDataSetChanged(); pager.setOffscreenPageLimit(0);
bootstrappageradapter中的代码(2)摘要
代码查看用户滚动的位置并立即查找日期
DateTime pagerdate = DateTime.now(TimeZone.getDefault()); DateTime days = pagerdate.plusDays(position - 5000);
例如,用户下一天刷了五天.位置是5003所以总和是5003-5000 = 3天
使用date4j库轻松加上3天(我强烈推荐它!)然后我创建一个包含日期的新片段!
public class BootstrapPagerAdapter extends FragmentPagerAdapter { /** * Create pager adapter * * @param resources * @param fragmentManager */ public BootstrapPagerAdapter(Resources resources, FragmentManager fragmentManager) { super(fragmentManager); } @Override public int getCount() { return 10000; } @Override public int getItemPosition(Object object){ return FragmentStatePagerAdapter.POSITION_NONE; } @Override public Fragment getItem(int position) { DateTime pagerdate = DateTime.now(TimeZone.getDefault()); DateTime days = pagerdate.plusDays(position - 5000); Bundle bundle = new Bundle(); bundle.putString("date", days.format("YYYY-MM-DD").toString()); RoosterFragment roosterFragment = new RoosterFragment(); roosterFragment.setArguments(bundle); return roosterFragment; } }
你可以用更高的数字假装无休止的数字,如年份0001年3999
周围:1.500.000天相信我没有人会一路走到这么远的地方!我尝试了很多无限的例子,但这是我认为唯一的工作实例!
如果它适用于您,请不要害羞地要求更多示例或帮助您的应用程序!
然而,如果某人得到类似真正的infinteviewpager而没有假计数等等,那将会很酷;)