簡體   English   中英

Android ViewPager加載錯誤的數據

[英]Android viewpager loading wrong data

我有一個ViewPager,它代表周及其無限。

問題是,當我向左或向右滑動數據加載項時,再過一秒后,它會從其開始的那一周開始重新加載數據。

PageModelWeek.java

public class PageModelWeek
{
    private int index;

    private String text;    

    private String monday;
    private String mondayValue;
    private String tuesday;
    private String tuesdayValue;
    private String wednesday;
    private String wednesdayValue;
    private String thursday;
    private String thursdayValue;
    private String friday;
    private String fridayValue;
    private String saturday;
    private String saturdayValue;
    private String sunday;
    private String sundayValue;

    private Context context;

    public PageModelWeek(int index, Context context)
    {
        this.index = index;
        this.context = context;
        setIndex(index);
    }

    public int getIndex()
    {
        return index;
    }

    public void setIndex(int index)
    {
        this.index = index;
        setWeek(index);
    }

    public String getText()
    {
        return text;
    }

    public void setText(String text)
    {
        this.text = text;
    }   

    public Context getContext()
    {
        return context;
    }

    public void setContext(Context context)
    {
        this.context = context;
    }

    private void setWeek(int index)
    {
        SimpleDateFormat dayOfWeekFormat = new SimpleDateFormat("EEEE", Locale.getDefault());   
        SimpleDateFormat dayOfMonthFormat = new SimpleDateFormat("dd", Locale.getDefault());

        Calendar calendar = Calendar.getInstance();

        calendar.add(Calendar.WEEK_OF_YEAR, index); 
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        calendar.set(Calendar.HOUR_OF_DAY, 0);

        for (int i = 0; i < 7; i++)
        {           
            if (i == 0)
            {
                monday = dayOfWeekFormat.format(calendar.getTime()).substring(0, 1).toUpperCase();
                mondayValue = dayOfMonthFormat.format(calendar.getTime());
            }
            else if (i == 1)
            {
                tuesday = dayOfWeekFormat.format(calendar.getTime()).substring(0, 1).toUpperCase();
                tuesdayValue = dayOfMonthFormat.format(calendar.getTime());
            }
            else if (i == 2)
            {
                wednesday = dayOfWeekFormat.format(calendar.getTime()).substring(0, 1).toUpperCase();
                wednesdayValue = dayOfMonthFormat.format(calendar.getTime());
            }
            else if (i == 3)
            {
                thursday = dayOfWeekFormat.format(calendar.getTime()).substring(0, 1).toUpperCase();
                thursdayValue = dayOfMonthFormat.format(calendar.getTime());
            }
            else if (i == 4)
            {
                friday = dayOfWeekFormat.format(calendar.getTime()).substring(0, 1).toUpperCase();
                fridayValue = dayOfMonthFormat.format(calendar.getTime());
            }
            else if (i == 5)
            {
                saturday = dayOfWeekFormat.format(calendar.getTime()).substring(0, 1).toUpperCase();
                saturdayValue = dayOfMonthFormat.format(calendar.getTime());
            }
            else if (i == 6)
            {
                sunday = dayOfWeekFormat.format(calendar.getTime()).substring(0, 1).toUpperCase();
                sundayValue = dayOfMonthFormat.format(calendar.getTime());
            } 

            calendar.add(Calendar.DATE, 1);
        }       

        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
        String d = sdf.format(calendar.getTime());              

        this.text = d;      
    }

    public String getMonday()
    {
        return monday;
    }

    public String getMondayValue()
    {
        return mondayValue;
    }

    public String getTuesday()
    {
        return tuesday;
    }

    public String getTuesdayValue()
    {
        return tuesdayValue;
    }

    public String getWednesday()
    {
        return wednesday;
    }

    public String getWednesdayValue()
    {
        return wednesdayValue;
    }

    public String getThursday()
    {
        return thursday;
    }

    public String getThursdayValue()
    {
        return thursdayValue;
    }

    public String getFriday()
    {
        return friday;
    }

    public String getFridayValue()
    {
        return fridayValue;
    }

    public String getSaturday()
    {
        return saturday;
    }

    public String getSaturdayValue()
    {
        return saturdayValue;
    }

    public String getSunday()
    {
        return sunday;
    }

    public String getSundayValue()
    {
        return sundayValue;
    }       
}

聽眾

viewPagerWeeks.setOnPageChangeListener(new OnPageChangeListener()
        {

            @Override
            public void onPageSelected(int position)
            {
                mSelectedWeekPageIndex = position;

            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2)
            {}

            @Override
            public void onPageScrollStateChanged(int state)
            {
                if (state == ViewPager.SCROLL_STATE_IDLE)
                {

                    final PageModelWeek leftPage = mWeekPageModel[PAGE_LEFT];
                    final PageModelWeek middlePage = mWeekPageModel[PAGE_MIDDLE];
                    final PageModelWeek rightPage = mWeekPageModel[PAGE_RIGHT];

                    final int oldLeftIndex = leftPage.getIndex();
                    final int oldMiddleIndex = middlePage.getIndex();
                    final int oldRightIndex = rightPage.getIndex();

                    // user swiped to right direction --> left page
                    if (mSelectedWeekPageIndex == PAGE_LEFT)
                    {

                        // moving each page content one page to the right
                        leftPage.setIndex(oldLeftIndex - 1);
                        middlePage.setIndex(oldLeftIndex);
                        rightPage.setIndex(oldMiddleIndex);

                        setWeekContent(PAGE_RIGHT);
                        setWeekContent(PAGE_MIDDLE);
                        setWeekContent(PAGE_LEFT);

                        // user swiped to left direction --> right page
                    }
                    else if (mSelectedWeekPageIndex == PAGE_RIGHT)
                    {

                        leftPage.setIndex(oldMiddleIndex);
                        middlePage.setIndex(oldRightIndex);
                        rightPage.setIndex(oldRightIndex + 1);

                        setWeekContent(PAGE_LEFT);
                        setWeekContent(PAGE_MIDDLE);
                        setWeekContent(PAGE_RIGHT);
                    }

                    viewPagerWeeks.setCurrentItem(PAGE_MIDDLE, false);
                }
            }
        });

setContentWeek

private void setWeekContent(int index)
    {
        final PageModelWeek model = mWeekPageModel[index];                  
    }

適配器

private class ViewPagerWeeksAdaper extends PagerAdapter
    {

        @Override
        public int getItemPosition(Object object)
        {
            return POSITION_NONE;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object)
        {
            container.removeView((View) object);
        }

        @Override
        public int getCount()
        {
            // we only need three pages
            return 3;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position)
        {
            LinearLayout ll = (LinearLayout) mInflater.inflate(R.layout.dayview_header_days, null);         
            PageModelWeek currentWeek = mWeekPageModel[position];       

            for (int i = 0; i < ll.getChildCount(); i++)
            {
                LinearLayout llDay = (LinearLayout) ll.getChildAt(i);
                TextView tvDayOfWeek = (TextView) llDay.getChildAt(0);
                TextView tvDayOfMonth = (TextView) llDay.getChildAt(1);

                if (i == 0)
                {
                    tvDayOfWeek.setText(currentWeek.getMonday());
                    tvDayOfMonth.setText(currentWeek.getMondayValue());
                }
                else if (i == 1)
                {
                    tvDayOfWeek.setText(currentWeek.getTuesday());
                    tvDayOfMonth.setText(currentWeek.getTuesdayValue());
                }
                else if (i == 2)
                {
                    tvDayOfWeek.setText(currentWeek.getWednesday());
                    tvDayOfMonth.setText(currentWeek.getWednesdayValue());
                }
                else if (i == 3)
                {
                    tvDayOfWeek.setText(currentWeek.getThursday());
                    tvDayOfMonth.setText(currentWeek.getThursdayValue());
                }
                else if (i == 4)
                {
                    tvDayOfWeek.setText(currentWeek.getFriday());
                    tvDayOfMonth.setText(currentWeek.getFridayValue());
                }
                else if (i == 5)
                {
                    tvDayOfWeek.setText(currentWeek.getSaturday());
                    tvDayOfMonth.setText(currentWeek.getSaturdayValue());
                }
                else if (i == 6)
                {
                    tvDayOfWeek.setText(currentWeek.getSunday());
                    tvDayOfMonth.setText(currentWeek.getSundayValue());
                }               
            }

            container.addView(ll);
            return ll;
        }

        @Override
        public boolean isViewFromObject(View view, Object obj)
        {
            return view == obj;
        }
    }

當我開始活動時,這稱為

private void initWeekPageModel()
    {
        for (int i = 0; i < mWeekPageModel.length; i++)
        {
            // init the pagemodel with indexes of -1, 0 and 1
            mWeekPageModel[i] = new PageModelWeek(i - 1, this);
        }
    }

我認為這行是什么困擾您位於onPageScrollStateChanged(int state)

 viewPagerWeeks.setCurrentItem(PAGE_MIDDLE, false);

當我閱讀代碼時。 一旦viewpager“解決”,它將執行一些操作,然后最后滾動到初始頁面(我假設這是中間頁面)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM