Android中的Viewpager无休止地在天之间切换

 灬段裝丶緈褔_998 发布于 2023-02-10 14:17

我正在制作一个应用程序,学生可以在那里查看课程网格.使用json文件检索课程.现在更改日期是通过操作栏中的按钮完成的,但我想让它也可以使用平滑的滑动效果.

唯一需要改变的是左侧滑动的SlectedDate-1 .右侧滑动时的SelectedDate + 1 .

我用ViewPagers 尝试了但是它没有用,有人知道怎么做吗?也许有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而没有假计数等等,那将会很酷;)

1 个回答
  • 我已经在不久前解决了这个问题,这个代码有点基于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而没有假计数等等,那将会很酷;)

    2023-02-10 14:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有