Viewpager在Android中无休止地天之间进行切换天之、Viewpager、Android

2023-09-13 00:56:43 作者:你是我的女人谁也不准碰

我目前做一个应用程序,学生可以查看有课网格。 这些课程是使用 JSON文件检索。 现在,日终通过在动作条按钮完成,但我希望把它也与流畅的滑动效果的工作。

这是需要改变的唯一的事情就是SlectedDate-1在左边的刷卡。 右边将selectedDate + 1 刷卡

我试图与 ViewPager 取值,但它没有工作没有任何人知道该怎么办呢? 或许真的有3 viewpagers?请详细code,因为我不是很familar与viewpagers code!

我已经试过了的Andr​​oid ViewPager与日期 code工作,但它并没有为我工作。

 私有类ScreenSlidePagerAdapter扩展FragmentStatePagerAdapter {
    公共ScreenSlidePagerAdapter(FragmentManager FM){
        超(FM);
    }

    @覆盖
    公共片段的getItem(INT位置){
        字符串myFormat =YYYY-MM-DD;
        SimpleDateFormat的SDF =新的SimpleDateFormat(myFormat,Locale.US);

         开关(位置){
           情况下0:
                  //创建日期,最左边的片段
                    myCalendar.add(Calendar.DAY_OF_YEAR,-1);
                    最后弦乐dateje = sdf.format(myCalendar.getTime());
                   // mPager.setCurrentItem(1);
                  返回ScreenSlidePageFragment.create(dateje);


              情况1:
                  //创建日期为中心的片段
                  myCalendar.add(Calendar.DAY_OF_YEAR,0);
                最后弦乐dateje2 = sdf.format(myCalendar.getTime());
              //mPager.setCurrentItem(1);
              返回ScreenSlidePageFragment.create(dateje2);

              案例2:
                  myCalendar.add(Calendar.DAY_OF_YEAR,1);
                最后弦乐dateje3 = sdf.format(myCalendar.getTime());
              //mPager.setCurrentItem(1);

              返回ScreenSlidePageFragment.create(dateje3);
           }

      返回null;
    }

    @覆盖
    公众诠释getCount将(){
        返回3;
    }
 

我的例子片段

 公共类ScreenSlidePageFragment扩展片段{
    / **
     *参数键页码该片段重新presents。
     * /
    公共静态最后弦乐ARG_PAGE =页面;

    / **
     *片段的页号,它被设置为{@link #ARG_PAGE}的参数值。
     * /
    私人诠释mPageNumber;

    / **
     *工厂方法该片段类。为给定的页面数的新的片段。
     * /
    公共静态ScreenSlidePageFragment创建(字符串dateNumber){
        ScreenSlidePageFragment片段=新ScreenSlidePageFragment();
        捆绑的args =新包();
        args.putString(ARG_PAGE,dateNumber);
        fragment.setArguments(参数);
        返回片段;
    }

    公共ScreenSlidePageFragment(){
    }

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        mPageNumber = 1;



    }

    @覆盖
    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
            捆绑savedInstanceState){
        //充气含标题和正文布局。
        ViewGroup中rootView =(的ViewGroup)充气
                .inflate(R.layout.fragment_screen_slide_page,集装箱,假);


        。字符串日期= this.getArguments()的getString(ARG_PAGE);
        //设置标题视图,显示页码。
        ((TextView中)rootView.findViewById(android.R.id.text1))的setText(日期);

        返回rootView;
    }

    / **
     *返回此片段对象psented页码重新$ P $。
     * /
    公众诠释getPageNumber(){
        返回mPageNumber;
    }
}
 
Android中ViewPager常用功能8 幻灯片效果

解决方案

我已经解决了这个问题一点时间前,这code是一个有点基于ONT从Kuffs的答案,但我dont't得到的日期一个数组,因为它的很多性能要放很多天阵。

的code Summarry (1)code使得在它周围10.000页fragmentpager。在主要活动初始化应用程序在中间设置TE当前页面(5000)

  pager.setAdapter(新BootstrapPagerAdapter(getResources(),getSupportFragmentManager()));
        pager.setCurrentItem(5000,FALSE);
        pager.post(新的Runnable(){
                            公共无效的run(){
                            pager.setCurrentItem(5000,FALSE);
                        }
                    });
        pager.getAdapter()notifyDataSetChanged()。
        pager.setOffscreenPageLimit(0);
 

的code摘要(2)在bootstrappageradapter

在code看起来什么位置,用户滚动,现在看起来的日期

 日期时间pagerdate = DateTime.now(TimeZone.getDefault());
   日期时间天= pagerdate.plusDays(位置 -  5000);
 

例如。用户刷卡5天下一步。位置是5003 所以总和为5003-5000 = 3天

天易数加3天, date4j库(我强烈推荐!)然后我让在其束之日起一个新的片段!

 公共类BootstrapPagerAdapter扩展FragmentPagerAdapter {

/ **
 *创建寻呼机适配器
 *
 * @参数资源
 * @参数fragmentManager
 * /
公共BootstrapPagerAdapter(资源资源,FragmentManager fragmentManager){
    超(fragmentManager);
}

@覆盖
公众诠释getCount将(){
    返回10000;
}
@覆盖
公众诠释getItemPosition(Object对象){
    返回FragmentStatePagerAdapter.POSITION_NONE;
}
@覆盖
公共片段的getItem(INT位置){

    日期时间pagerdate = DateTime.now(TimeZone.getDefault());
    日期时间天= pagerdate.plusDays(位置 -  5000);

    束束=新包();
    bundle.putString(日期,days.format(YYYY-MM-DD)的toString());

    RoosterFragment roosterFragment =新RoosterFragment();
    roosterFragment.setArguments(包);

    返回roosterFragment;
}
}
 

您可以假冒不休具有更高的数字像数 一年0001 3999年

围绕:1.500.000天相信我,没有人会走这么远的所有刷卡的方式! 我已经尝试了很多无限的例子,但是这是唯一的工作的例子,我认为!

Upvote,如果它为你工作,不要害羞,要求更多的例子,或与您的应用程序的帮助!

但它会很酷,如果有人有东西像一个真正infinte viewpager无假货计等;)

I am currently making a app where students can view there lesson grid. The lessons are retrieved using a json file. Now the date changing is done via buttons in the actionbar, but i want to make it also work with smooth swipe effects.

The only things that need to change is the SlectedDate-1 on left swipe. the SelectedDate+1 on right swipe.

I tried it with ViewPagers but it didn't work does anybody know how to do it? Maybe something with 3 viewpagers?, please a detailed code because I'm not very familar with viewpagers code!

I've tried out Android ViewPager working with date code but it doesn't work for me.

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

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

解决方案

I have fixed this problems a little time ago, this code is a bit based ont the answer from Kuffs but I dont't get the date in an array because it's a lot of performance to put a lot of days in array.

Summarry of code (1) The code makes a fragmentpager with around 10.000 pages in it. On main activity init the app set te current page in the middle(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);

Summary of code (2) in the bootstrappageradapter

The code looks what position the user has scrolled and looks for the date now

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

e.g. user swiped five days next. position is 5003 so the sum is 5003-5000=3 days

the days count easily plus 3 days with date4j library (I highly recommend it!) then I make a new fragment with the date in its bundle!

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

You could fake the endlessly count with more high numbers like year 0001 year 3999

Around the: 1.500.000 days believe me no one is gonna go this far all the way swiping! I've tried the a lot infinite examples but this is the only working example I think!

Upvote if it worked for you and don't be shy to ask for more examples or help with your app!

However it would be cool if someone got something like a really infinte viewpager without fake counts and so on ;)