我正在制作一个应用程序,学生可以在那里查看课程网格。 使用json file检索课程。 现在,日期更改是通过操作栏中的按钮完成的,但我想让它也可以使用平滑的滑动效果。
唯一需要更改的是左侧的滑动中的SlectedDate-1。 右侧的选定日期+ 1 滑动。
我用ViewPager
试了一下,但是没有人知道该怎么办?
也许有3个浏览器的东西?请详细的代码,因为我不太熟悉viewpagers代码!
我已经尝试了Android ViewPager working with date代码,但它对我不起作用。
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;
}
}
答案 0 :(得分: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);
e.g。用户接下来五天刷了一下。位置是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天相信我没有人会一路走到这一边! 我已经尝试了很多无限的例子,但这是我认为唯一的工作实例!
Upvote是否适用于您并且不要害羞地请求更多示例或帮助您的应用程序!
然而,如果某人得到类似真正的infinteviewpager而没有假计数等等,那将会很酷;)
答案 1 :(得分:2)
创建一个包含要支持的日期数组的pageradapter。您可以在构造函数中传递此数组。
覆盖getCount以返回数组中正确的日期数。
覆盖getItem并从中返回一个片段,并根据position参数初始化日期。