Почему мне нужно дважды провести пальцем, чтобы перейти к следующему месяцу в моем календаре? - PullRequest
0 голосов
/ 01 декабря 2018

Может кто-нибудь мне помочь?Я уверен, что все здесь могут относиться к моей ситуации.Я смотрю на свой компьютер уже 3 дня подряд.Я не могу найти решение.Это сводит меня с ума!Заранее благодарим за любую благодарную помощь.

Проблема:
Первоначальный фрагмент - текущий месяц (ноябрь).Проведите вправо, чтобы перейти к следующему месяцу.Проведите влево, чтобы перейти к предыдущему месяцу.Происходит первый пролистывание влево или вправо, показывающее тот же месяц (ноябрь).Затем, при следующем ударе, все ведет себя как ожидалось.

Среда: 4 класса.
- CalendarHome - Родительское действие.
- CalFragmentAdapter - Адаптер фрагмента.
- CalFragment - Фрагмент.
- CalGridAdapter - Адаптер GridView.

CalendarHome:

FragmentManager fm=getSupportFragmentManager();

CalFragmentAdapter adapter=new CalFragmentAdapter(fm,cal);
    vp.setAdapter(adapter);
    vp.setCurrentItem(100,false);

    // Calendar month swipe actions
    vp.addOnPageChangeListener(new OnPageChangeListener(){
        @Override
        public void onPageSelected(int position){
            // If swipe left
            if(position<lastNum){
            cal.add(Calendar.MONTH,-1);
            // If swipe right
            }else if(position>lastNum){
            cal.add(Calendar.MONTH,1);
            }
            // Set the last month number to check against the next position number. Tells me the swipe direction.
            lastNum=position;
        }
    }

CalFragmentAdapter:

public CalFragmentAdapter(FragmentManager fm, Calendar cal) {
    super(fm);
    this.cal = cal;
}

@Override
public Fragment getItem(int position) {
    // Create fragment object
    CalFragment calFragmentOne = new CalFragment();
    // Pass data to fragment
    Bundle info = new Bundle();
    info.putSerializable("cal", cal);
    // More arguments go here
    calFragmentOne.setArguments(info);

    return calFragmentOne;
}

@Override
public int getCount() {
    return 200;
}

CalFragment:

    // Get data from adapter
    Calendar cal = (Calendar) getArguments().getSerializable("cal");

    // Create gridView adapter object.
    CalGridAdapter gridAdapter = new CalGridAdapter(context, cal);
    gridView.setAdapter(gridAdapter);

    return rootview;

CalGridAdapter:

public CalGridAdapter(Context context, Calendar cal) {
    this.context = context;
    this.calendarHeight = calendarHeight;

    // Get calendar variables values... all values are correct.
    this.month = cal.get(Calendar.MONTH);
    this.dateNum = cal.get(Calendar.DAY_OF_MONTH);

    // Calculate new values from calendar... all values are correct.
    CalendarHelper calendarHelper = new CalendarHelper(cal);
    begin = calendarHelper.getBeginDay();
    lastMonthEndNum = calendarHelper.getEndNum(-1);
    endNum = calendarHelper.getEndNum(0);
}

@Override
public int getCount() {
    return 42;
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Inflater object for individual cell layout
    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        // Inflate individual gridView cell layout
        view = new View(context);
        view = layoutInflater.inflate(R.layout.cal_single_date, null);

        // View objects
        TextView title_view = view.findViewById(R.id.title_view);
        dateView = view.findViewById(R.id.date_num_view);

        int cellNum = position + 1 - begin;
        // Set numbers of the previous month
        if (position < begin) {
            dateView.setText("" + (lastMonthEndNum - (begin - position) + 1));
        // Set numbers of the current month
        } else if (cellNum <= endNum) {
            dateView.setText("" + cellNum);
        // Set numbers of the next month
        } else if (position > endNum) {
            dateView.setText("" + (position - (endNum + begin) + 1));
        }
    }
    return view;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...