0

I'm trying to implement Viewpager with a calendar. I'm using the same three instances of the calendar Fragment for testing the ViewPager lets call the smooth motion of transferring one fragment to the next SWIPING. the swiping will not work in the area of the fragment that the layout was created dynamically in the fragment itself but the rest of page(above and below the date buttons)the swiping works great! here is some of the code the entire frag code would not fit so had to edit some declarations and button listener methods

// Main Activity

public class calenderview extends AppCompatActivity {
ArrayList<Fragment> fraglist;
 ViewPager pager;
calenderviewpageradaptor adaptor;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_calenderview);
    fraglist = new ArrayList<>();
    fraglist.add(new Calview_frag()); fraglist.add(new Calview_frag()); fraglist.add(new Calview_frag());
     adaptor = new calenderviewpageradaptor(getSupportFragmentManager(),fraglist);
     pager = (ViewPager)findViewById(R.id.pager);
    pager.setAdapter(adaptor);
}
public class calenderviewpageradaptor extends FragmentStatePagerAdapter {

    ArrayList<Fragment>  adaptorlist;
    public calenderviewpageradaptor(FragmentManager fm,ArrayList<Fragment> list){
        super (fm);
        this.adaptorlist = list;
    }

    @Override
    public int getCount(){
        return 3;
    }
    @Override
    public Fragment getItem(int pos){
                return adaptorlist.get(pos);

    }
      }

}

public class Calview_frag extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    private LinearLayout.LayoutParams getdaysLayoutParams() {
        LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(

                ViewGroup.LayoutParams.WRAP_CONTENT,

                ViewGroup.LayoutParams.WRAP_CONTENT);

        buttonParams.weight = 1;

        return buttonParams;

    }
    private void addDaysinCalendar(ViewGroup.LayoutParams buttonParams, DisplayMetrics metrics) {

        int engDaysArrayCounter = 0;

        LinearLayout.LayoutParams doitwithmarg = new LinearLayout.LayoutParams(120,120);
        doitwithmarg.setMarginStart(cacmarg);
        LinearLayout.LayoutParams doittoit = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT); doittoit.weight=1;

        for (int weekNumber = 0; weekNumber < 6; ++weekNumber) {

            for (int dayInWeek = 0; dayInWeek < 7; ++dayInWeek) {

                Button day = new  Button(getContext());

                day.setBackground(getResources().getDrawable(R.drawable.roundshapeclear));
                day.setTextColor(getResources().getColor(R.color.GREY));
                day.setBackgroundColor(Color.TRANSPARENT);
                day.setTextSize((int) metrics.density *5 );
                day.setSingleLine();

                if(dayInWeek!=0){
                    day.setLayoutParams(doitwithmarg);
                    Space s = new Space(getContext());
                    s.setLayoutParams(doittoit);
                    weeks[weekNumber].addView(s);
                    days[engDaysArrayCounter] = day;
                    weeks[weekNumber].addView(day);}
                  else{
                    day.setLayoutParams(doitwithmarg);
                    days[engDaysArrayCounter] = day;
                    weeks[weekNumber].addView(day);}
                ++engDaysArrayCounter;

            }

        }

    }
    private void init(View view) {

        DisplayMetrics metrics = getResources().getDisplayMetrics();

        calendar = Calendar.getInstance();



        weekOneLayout = (LinearLayout)view.findViewById(R.id.calendar_week_1);

        weekTwoLayout = (LinearLayout)view.findViewById(R.id.calendar_week_2);

        weekThreeLayout = (LinearLayout)view.findViewById(R.id.calendar_week_3);

        weekFourLayout = (LinearLayout)view.findViewById(R.id.calendar_week_4);

        weekFiveLayout = (LinearLayout)view.findViewById(R.id.calendar_week_5);

        weekSixLayout = (LinearLayout)view.findViewById(R.id.calendar_week_6);

        currentYear = (TextView)view.findViewById(R.id.current_date);

        currentMonth = (TextView)view.findViewById(R.id.current_month);

        currentDateDay = chosenDateDay = calendar.get(Calendar.DAY_OF_MONTH);



        if (userMonth != 0 && userYear != 0) {

            currentDateMonth = chosenDateMonth = userMonth;

            currentDateYear = chosenDateYear = userYear;

        } else {

            currentDateMonth = chosenDateMonth = calendar.get(Calendar.MONTH);

            currentDateYear = chosenDateYear = calendar.get(Calendar.YEAR);

        }



        currentYear.setText("" + chosenDateYear);

        currentMonth.setText(ENG_MONTH_NAMES[currentDateMonth]);


        initializeDaysWeeks();

        if (userButtonParams != null) {

            defaultButtonParams = userButtonParams;

        } else {

            defaultButtonParams = getdaysLayoutParams();

        }

        addDaysinCalendar(defaultButtonParams,metrics);



        initCalendarWithDate(chosenDateYear, chosenDateMonth, chosenDateDay,view);



    }



    private void initializeDaysWeeks() {

        weeks = new LinearLayout[6];

        days = new Button[6 * 7];

        weeks[0] = weekOneLayout;

        weeks[1] = weekTwoLayout;

        weeks[2] = weekThreeLayout;

        weeks[3] = weekFourLayout;

        weeks[4] = weekFiveLayout;

        weeks[5] = weekSixLayout;

    }
    private void initCalendarWithDate(int year, int month, int day, View v) {

        if (calendar == null)

            calendar = Calendar.getInstance();

        calendar.set(year, month, day);

        int daysInCurrentMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);


        chosenDateYear = year;

        chosenDateMonth = month;

        chosenDateDay = day;

        calendar.set(year, month, 1);

        int firstDayOfCurrentMonth = calendar.get(Calendar.DAY_OF_WEEK);

        Log.d(tag,"FFFFFFiiiiiiiiiiirrrrrrrrrrsssssssssst day of month int"+firstDayOfCurrentMonth);

        calendar.set(year, month, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        Log.d(tag,"LLLLLLLLLLLLlaaaaasttttttttttt day of month int"+daysInCurrentMonth);

        int dayNumber = 1;

        int daysLeftInFirstWeek = 0;
        firstDayOfCurrentMonth= firstDayOfCurrentMonth-1;
        int indexOfDayAfterLastDayOfMonth = 0;

        if (firstDayOfCurrentMonth != 0) {

            daysLeftInFirstWeek = firstDayOfCurrentMonth;

            indexOfDayAfterLastDayOfMonth = daysLeftInFirstWeek + daysInCurrentMonth;

       >                 for (int i = firstDayOfCurrentMonth; i < firstDayOfCurrentMonth + daysInCurrentMonth; ++i) {
                //checks all dates of calendar to set background and text colors
                if (currentDateMonth == chosenDateMonth

                        && currentDateYear == chosenDateYear

                        && dayNumber == currentDateDay){
                    days[i].setBackground(getResources().getDrawable(R.drawable.roundshapegrey));
                    days[i].setTextColor(Color.WHITE);

                } else {
                    days[i].setBackground(getResources().getDrawable(R.drawable.roundshapeclear));

                    days[i].setTextColor(Color.BLACK);


                }



                int[] dateArr = new int[3];

                dateArr[0] = dayNumber;

                dateArr[1] = chosenDateMonth;

                dateArr[2] = chosenDateYear;

                days[i].setTag(dateArr);

                days[i].setText(String.valueOf(dayNumber));



                days[i].setOnClickListener(new View.OnClickListener() {

                    @Override

                    public void onClick(View v) {
                        onDayClick(v);

                    }

                });

                ++dayNumber;

            }
      > 
            for (int i = 7; i < 7 + daysInCurrentMonth; ++i) {

                if (currentDateMonth == chosenDateMonth

                        && currentDateYear == chosenDateYear

                        && dayNumber == currentDateDay) {
                    days[i].setBackground(getResources().getDrawable(R.drawable.roundshape));


                    days[i].setTextColor(Color.WHITE);

                } else {
                    days[i].setBackground(getResources().getDrawable(R.drawable.roundshapeclear));

                    days[i].setTextColor(Color.BLACK);


                }



                int[] dateArr = new int[3];

                dateArr[0] = dayNumber;

                dateArr[1] = chosenDateMonth;

                dateArr[2] = chosenDateYear;

                days[i].setTag(dateArr);

                days[i].setText(String.valueOf(dayNumber));



                days[i].setOnClickListener(new View.OnClickListener() {

                    @Override

                    public void onClick(View v) {
                        onDayClick(v);

                    }

                });

                ++dayNumber;

            }

        }

//Displays previous and next month days

        if (month > 0)

            calendar.set(year, month - 1, 1);

        else

            calendar.set(year - 1, 11, 1);

        int daysInPreviousMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);



        for (int i = daysLeftInFirstWeek - 1; i >= 0; --i) {

            int[] dateArr = new int[3];



            if (chosenDateMonth > 0) {

                if (currentDateMonth == chosenDateMonth - 1

                        && currentDateYear == chosenDateYear

                        && daysInPreviousMonth == currentDateDay) {

                } else {
                    days[i].setBackground(getResources().getDrawable(R.drawable.roundshapeclear));

                }



                dateArr[0] = daysInPreviousMonth;

                dateArr[1] = chosenDateMonth - 1;

                dateArr[2] = chosenDateYear;

            } else {

                if (currentDateMonth == 11

                        && currentDateYear == chosenDateYear - 1

                        && daysInPreviousMonth == currentDateDay) {

                } else {
                    days[i].setBackground(getResources().getDrawable(R.drawable.roundshapeclear));


                }



                dateArr[0] = daysInPreviousMonth;

                dateArr[1] = 11;

                dateArr[2] = chosenDateYear - 1;

            }

            days[i].setTag(dateArr);
            days[i].setTextColor(getResources().getColor(R.color.GREY));;

            days[i].setText("");

            days[i].setOnClickListener(null);

        }

        int nextMonthDaysCounter = 1;

        for (int i = indexOfDayAfterLastDayOfMonth; i < days.length; ++i) {

            int[] dateArr = new int[3];


            if (chosenDateMonth < 11) {

                if (currentDateMonth == chosenDateMonth + 1

                        && currentDateYear == chosenDateYear

                        && nextMonthDaysCounter == currentDateDay) {

                    //       days[i].setBackground(getResources().getDrawable(R.drawable.roundshapegrey));
                    days[i].setTextColor(Color.WHITE);

                } else {

                    days[i].setBackground(getResources().getDrawable(R.drawable.roundshapeclear));

                }



                dateArr[0] = nextMonthDaysCounter;

                dateArr[1] = chosenDateMonth + 1;

                dateArr[2] = chosenDateYear;

            } else {

                if (currentDateMonth == 0

                        && currentDateYear == chosenDateYear + 1

                        && nextMonthDaysCounter == currentDateDay) {
                    //        selectedDayButton.setBackground(getResources().getDrawable(R.drawable.roundshapegrey));
                    selectedDayButton.setTextColor(Color.WHITE);
                    //        days[i].setBackground(getResources().getDrawable(R.drawable.roundshapegrey));
                    days[i].setTextColor(Color.WHITE);
                } else {

                    days[i].setBackground(getResources().getDrawable(R.drawable.roundshapeclear));

                }



                dateArr[0] = nextMonthDaysCounter;

                dateArr[1] = 0;

                dateArr[2] = chosenDateYear + 1;

            }

            days[i].setTag(dateArr);

            days[i].setText("");
            days[i].setOnClickListener(null);
        }

        calendar.set(chosenDateYear, chosenDateMonth, chosenDateDay);
        currentYear.setText(" " + chosenDateYear);
        currentMonth.setText(ENG_MONTH_NAMES[chosenDateMonth]);


    }
public Calview_frag() {//required empty constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View layoutview = inflater.inflate(R.layout.fragment_calview,container,false);
     but = (ImageButton)layoutview.findViewById(R.id.getitbutton);
     fbut = (ImageButton)layoutview.findViewById(R.id.getit2button);
    display = getActivity().getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    screenheight = size.y;
    screenwidth = size.x;
    Log.d(tag,"sssssssssssccreen size  "+screenwidth);
    if(screenwidth<1300)
        cacmarg = screenwidth/50;
    else
        cacmarg = screenwidth/25;
    init(layoutview);
    return layoutview;
}

}

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/white"
            android:orientation="vertical">
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <ImageButton
                    android:id="@+id/getitbutton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="8dp"
                    android:layout_alignParentLeft="true"
                    android:src="@drawable/backbutton"
                    tools:layout_editor_absoluteY="0dp" />
                <LinearLayout

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_centerHorizontal="true"

                    android:gravity="center"

                    android:orientation="horizontal">

                    <TextView

                        android:id="@+id/current_month"

                        android:layout_width="wrap_content"

                        android:layout_height="wrap_content"

                        android:textColor="@color/bluegrey"

                        android:textSize="28sp" />


                    <TextView

                        android:id="@+id/current_date"

                        android:layout_width="wrap_content"

                        android:layout_height="wrap_content"

                        android:paddingLeft="4dp"

                        android:textColor="@color/bluegrey"

                        android:textSize="28sp" />

                </LinearLayout>

                <ImageButton
                    android:id="@+id/getit2button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:src="@drawable/forwardbutton"
                    />
      </RelativeLayout>

            <LinearLayout

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:orientation="horizontal"

                android:weightSum="7">


                <Button

                    android:id="@+id/button5"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_weight="1"

                    android:background="@android:color/transparent"

                    android:text="@string/sunday"

                    android:textColor="@color/bluegrey"

                    android:textSize="16sp" />


                <Button

                    android:id="@+id/button4"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_weight="1"

                    android:background="@android:color/transparent"

                    android:text="@string/monday"

                    android:textColor="@color/bluegrey"

                    android:textSize="16sp" />


                <Button

                    android:id="@+id/button10"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_weight="1"

                    android:background="@android:color/transparent"

                    android:text="@string/tuesday"

                    android:textColor="@color/bluegrey"

                    android:textSize="16sp" />


                <Button

                    android:id="@+id/button9"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_weight="1"

                    android:background="@android:color/transparent"

                    android:text="@string/wednesday"

                    android:textColor="@color/bluegrey"

                    android:textSize="16sp" />


                <Button

                    android:id="@+id/button8"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_weight="1"

                    android:background="@android:color/transparent"

                    android:text="@string/thursday"

                    android:textColor="@color/bluegrey"

                    android:textSize="16sp" />


                <Button

                    android:id="@+id/button7"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_weight="1"

                    android:background="@android:color/transparent"

                    android:text="@string/friday"

                    android:textColor="@color/bluegrey"

                    android:textSize="16sp" />


                <Button

                    android:id="@+id/button6"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_weight="1"

                    android:background="@android:color/transparent"

                    android:text="@string/saturday"

                    android:textColor="@color/bluegrey"

                    android:textSize="16sp" />


            </LinearLayout>


            <LinearLayout

                android:id="@+id/calendar_week_1"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

                android:orientation="horizontal"

                android:weightSum="7" />


            <LinearLayout

                android:id="@+id/calendar_week_2"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

                android:orientation="horizontal"

                android:weightSum="7" />


            <LinearLayout

                android:id="@+id/calendar_week_3"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

                android:orientation="horizontal"

                android:weightSum="7" />


            <LinearLayout

                android:id="@+id/calendar_week_4"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

                android:orientation="horizontal"

                android:weightSum="7" />


            <LinearLayout

                android:id="@+id/calendar_week_5"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

                android:orientation="horizontal"

                android:weightSum="7" />


            <LinearLayout

                android:id="@+id/calendar_week_6"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

                android:orientation="horizontal"

                android:weightSum="7" /> </LinearLayout>

</ScrollView>

</LinearLayout>

Jason
  • 1
  • 3

1 Answers1

0

are you passing the instance of the Fragment to the adapter? No I think. You should pass the list of fragments to the adapter along with fragment manager and should also change the calendarViewPager accordingly.

  List<Fragment> fragments =new ArrayList<>();
  fragments.add(Calview_frag());
  fragments.add(Calview_frag());
  fragments.add(Calview_frag());
      calenderviewpageradaptor adaptor =
                new calenderviewpageradaptor(getSupportFragmentManager(),fragments);
Abraham Mathew
  • 2,029
  • 3
  • 21
  • 42
  • Thanks ABr I did try adding the above code in my Activity and modified the constructor it did not make a difference though I posted some more code hopefully that will help – Jason Nov 26 '18 at 14:42
  • Also tried getting rid of the scroll view with same results – Jason Nov 26 '18 at 18:39
  • I was wondering if I needed some kind of callback in the fragment after it created its views to the viewpager – Jason Nov 26 '18 at 18:45
  • hey did you update the code in main activity? coz i didn't see that in the updated code – Abraham Mathew Nov 27 '18 at 04:04
  • here is my updated activity code that did not change the problem. I did not see much on passing a list to the adaptor so I could be way off here – Jason Nov 27 '18 at 15:14