gpt4 book ai didi

android - Android 中的 Viewpager 可以在不同的日子之间无休止地切换

转载 作者:行者123 更新时间:2023-11-29 14:20:45 25 4
gpt4 key购买 nike

我目前正在制作一个应用程序,学生可以在其中查看类(class)网格。使用 json file 检索类(class).现在日期更改是通过操作栏中的按钮完成的,但我想让它也能与平滑的滑动效果一起使用。

唯一需要更改的是左侧滑动 上的 SlectedDate-1。SelectedDate+1 在右侧轻扫

我用 ViewPager 试过了,但没有用,有人知道怎么做吗?也许有 3 个 viewpager?请提供详细代码,因为我对 viewpager 代码不是很熟悉!

我试过了 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;
}

我的示例 fragment

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;
}
}

最佳答案

我刚才已经解决了这个问题,这段代码有点基于Kuffs的答案。但我没有得到数组中的日期,因为将很多天放在数组中会产生很多性能。

代码摘要(1) 该代码制作了一个 FragmentPager,其中包含大约 10.000 页。在主 Activity 中,应用程序将当前页面设置为中间 (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中代码总结(二)

代码查看用户滚动的位置并查找现在的日期

DateTime pagerdate = DateTime.now(TimeZone.getDefault());
DateTime days = pagerdate.plusDays(position - 5000);

例如用户接下来刷了三天。位置是5003,所以总和是5003-5000=3天

使用 date4j 库(我强烈推荐它!),天数很容易加上 3 天,然后我制作了一个新 fragment ,其中包含日期!

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 天相信我,没有人会一路刷卡走这么远!

我已经尝试了很多无限的示例,但这是我认为唯一有效的示例!

如果它对您有用,请点赞,不要害羞地寻求更多示例或帮助您的应用!

然而,如果有人得到像真正无限的 viewpager 一样没有虚假计数等的东西,那就太酷了;)

关于android - Android 中的 Viewpager 可以在不同的日子之间无休止地切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20584129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com