Как перегруппировать фрагменты «день недели» после календарного действия - PullRequest
0 голосов
/ 03 апреля 2019

Я использую 7 фрагментов, которые представляют дни недели, я могу успешно датировать свои фрагменты при запуске.Проблема, которую я не могу найти, это;Я хотел бы повторно датировать каждый фрагмент после того, как я выбрал новую дату из своей Календарной активности (фрагменты слева от моей выбранной даты будут предшествовать дням, а фрагменты справа от моей выбранной даты будут в будущем).Любые мысли / помощь будут с благодарностью приняты:)

Я искал этот сайт в поисках вдохновения почти месяц

Это один из моих фрагментов;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.tab_fragment1, container, false);

    Button dateChangeBtn = rootView.findViewById(R.id.changeDateBtn1);
    dateChangeBtn.setOnClickListener(this);
    ctx = MainActivity.ctx;
    return rootView;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mTodayDate1 = view.findViewById(R.id.todayDate1);

    //set the date on the fragment dependant on whether the fragment is to the right or
    //the left of 'Today's' fragment
    int calAddAmount = TF1 - MainActivity.getAdjustedCurrentItem();
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_MONTH, calAddAmount);
    Date date = calendar.getTime();
    mTodayDate1.setText(MainActivity.getFriendlyDate(date));
}


/**
 * Called when a view has been clicked.
 *
 * @param v The view that was clicked.
 */
@Override
public void onClick(View v) {
    Intent calendarIntent = new Intent(ctx, CalendarActivity.class);
    startActivityForResult(calendarIntent, CALENDAR_REQUEST );
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CALENDAR_REQUEST) {
        if (resultCode == RESULT_OK) {
            try {
                String dateString = data.getStringExtra(CalendarActivity.CALENDAR_REPLY);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                Date date = sdf.parse(dateString);
                mTodayDate1.setText(MainActivity.getFriendlyDate(date));
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    }
}

Работает нормально, как есть, возвращает дату из календаря и датирует только этот фрагмент

1 Ответ

0 голосов
/ 29 апреля 2019

Я ушел от этой проблемы и занялся чем-то другим, я вернулся к нему и придумал это решение (это не красиво, и я был бы признателен за любую помощь в его улучшении, но это работает, и этодатирует все мои фрагменты за неделю дня, который был выбран из календаря)

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CALENDAR_REQUEST) {
        if (resultCode == RESULT_OK) {
            String dateString = data.getStringExtra(CalendarActivity.CALENDAR_REPLY);
            String dayName = "";
            Date date = null;

            try {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                date = sdf.parse(dateString);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            SimpleDateFormat sdfDay = new SimpleDateFormat("EEEE");
            dayName = sdfDay.format(date);

            //get the index of chosen day
            int dayInt = getDayIndex(dayName);

            //initialise all mTodayDate
            mTodayDate0 = findViewById(R.id.todayDate0);//Sunday
            mTodayDate1 = findViewById(R.id.todayDate1);
            mTodayDate2 = findViewById(R.id.todayDate2);
            mTodayDate3 = findViewById(R.id.todayDate3);
            mTodayDate4 = findViewById(R.id.todayDate4);
            mTodayDate5 = findViewById(R.id.todayDate5);
            mTodayDate6 = findViewById(R.id.todayDate6);//Saturday

            //convert to calendar object
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);

            //subtract dayInt from date chosen to give you Sunday's date
            cal.add(Calendar.DAY_OF_MONTH, -dayInt);

            //convert back to date object for setting the frag
            Date convertedFromCalendar = cal.getTime();

            //set date on frags, adding a day each time
            mTodayDate0.setText(getFriendlyDate(convertedFromCalendar));
            cal.setTime(convertedFromCalendar);
            cal.add(Calendar.DAY_OF_MONTH, 1);
            convertedFromCalendar = cal.getTime();
            mTodayDate1.setText(getFriendlyDate(convertedFromCalendar));
            cal.setTime(convertedFromCalendar);
            cal.add(Calendar.DAY_OF_MONTH, 1);
            convertedFromCalendar = cal.getTime();
            mTodayDate2.setText(getFriendlyDate(convertedFromCalendar));
            cal.setTime(convertedFromCalendar);
            cal.add(Calendar.DAY_OF_MONTH, 1);
            convertedFromCalendar = cal.getTime();
            mTodayDate3.setText(getFriendlyDate(convertedFromCalendar));
            cal.setTime(convertedFromCalendar);
            cal.add(Calendar.DAY_OF_MONTH, 1);
            convertedFromCalendar = cal.getTime();
            mTodayDate4.setText(getFriendlyDate(convertedFromCalendar));
            cal.setTime(convertedFromCalendar);
            cal.add(Calendar.DAY_OF_MONTH, 1);
            convertedFromCalendar = cal.getTime();
            mTodayDate5.setText(getFriendlyDate(convertedFromCalendar));
            cal.setTime(convertedFromCalendar);
            cal.add(Calendar.DAY_OF_MONTH, 1);
            convertedFromCalendar = cal.getTime();
            mTodayDate6.setText(getFriendlyDate(convertedFromCalendar));


        }
    }

}

//Returns the index number of the given day
public int getDayIndex(String aDayName){
    String[] daysOfTheWeek = new String[] {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    int dayInt = Arrays.asList(daysOfTheWeek).indexOf(aDayName);
    return dayInt;
}
...