diff --git a/testing/ScheduleFragment.java b/testing/ScheduleFragment.java new file mode 100644 index 0000000..43de046 --- /dev/null +++ b/testing/ScheduleFragment.java @@ -0,0 +1,237 @@ +package com.example.doitnow; + +import android.app.AlertDialog; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Handler; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.TextView; +import android.view.View; +import android.widget.NumberPicker; +import android.view.Gravity; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.gridlayout.widget.GridLayout; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +import com.example.doitnow.Adapter.kebiaoManager; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +public class ScheduleFragment extends Fragment { + private View tv; + private FrameLayout popupOverlay; + private List kebiaodata = new ArrayList<>(); + private static List alltext = new ArrayList<>(); + private kebiaoManager km; + private Date currentWeekDate; + + public static Date firstSunday(Date startdate) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startdate); + while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) { + calendar.add(Calendar.DATE, -1); + } + return calendar.getTime(); + } + + public void changeweekclick(View view) { + Button clickedButton = (Button) view; + String buttonText = clickedButton.getText().toString(); + int weeknum = Integer.parseInt(buttonText.replaceAll("\\D+", "")); + try { + currentWeekDate = km.getweekdate(weeknum); + displaylesson(currentWeekDate); + } catch (ParseException ignored) { + } + popupOverlay.setVisibility(View.GONE); + } + + public void setdatetext(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + SimpleDateFormat sdf = new SimpleDateFormat("M-d"); + for (int i = 115; i <= 121; i++) { + int resID = getResources().getIdentifier("textView" + i, "id", requireContext().getPackageName()); + TextView textView = tv.findViewById(resID); + if (textView != null) { + textView.setText(sdf.format(calendar.getTime())); + calendar.add(Calendar.DATE, 1); + } + } + } + + public void displaylesson(Date date) { + GridLayout gridLayout = tv.findViewById(R.id.timetable_container); + gridLayout.removeAllViews(); + + // 设置顶部周次按钮文本 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d"); + String weekdate = sdf.format(date); + int weeknum = km.getweeknum(weekdate); + Button bt1 = tv.findViewById(R.id.button3); + bt1.setText("第" + weeknum + "周"); + bt1.setVisibility(View.VISIBLE); + setdatetext(date); + + // 读取课程 + try { + kebiaodata = km.lessoninweek(date); + } catch (ParseException e) { + throw new RuntimeException(e); + } + + // ✅ 创建 13×7 的空白课表格子 + TextView[][] allCells = new TextView[13][7]; + for (int row = 0; row < 13; row++) { + for (int col = 0; col < 7; col++) { + TextView cell = new TextView(requireContext()); + GridLayout.LayoutParams params = new GridLayout.LayoutParams(); + params.rowSpec = GridLayout.spec(row, 1, 1f); + params.columnSpec = GridLayout.spec(col, 1, 1); + params.width = 0; + params.height = 0; + params.setMargins(6, 6, 6, 6); + cell.setLayoutParams(params); + cell.setBackgroundColor(Color.WHITE); // 默认空白 + cell.setGravity(Gravity.CENTER); + cell.setText(""); + cell.setTextSize(12); + gridLayout.addView(cell); + allCells[row][col] = cell; + } + } + + // ✅ 添加课程信息 + for (Lesson lesson : kebiaodata) { + int row = lesson.fromClass - 1; + int rowSpan = lesson.endClass - lesson.fromClass + 1; + int col = lesson.day; + + if (row >= 0 && row + rowSpan <= 13 && col >= 0 && col < 7) { + TextView cell = allCells[row][col]; + String text = lesson.name; + if (!Objects.equals(lesson.classroom, "null")) { + text += "\n" + lesson.classroom; + } + cell.setText(text); + cell.setTextColor(Color.WHITE); + cell.setBackgroundColor(Color.parseColor("#B388FF")); + cell.setGravity(Gravity.CENTER); + + GridLayout.LayoutParams params = (GridLayout.LayoutParams) cell.getLayoutParams(); + params.rowSpec = GridLayout.spec(row, rowSpan, 1f); + cell.setLayoutParams(params); + + // 隐藏合并下方单元格 + for (int i = 1; i < rowSpan; i++) { + allCells[row + i][col].setVisibility(View.GONE); + } + } + } + + // ✅ 更新日期范围显示 + TextView dateSummary = tv.findViewById(R.id.date_summary); + SimpleDateFormat rangeFormat = new SimpleDateFormat("yyyy/M/d"); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + String start = rangeFormat.format(cal.getTime()); + cal.add(Calendar.DATE, 6); + String end = rangeFormat.format(cal.getTime()); + dateSummary.setText(start + " ~ " + end); + } + + + + public void showWeekPickerDialog(Button weekButton) { + final NumberPicker picker = new NumberPicker(requireContext()); + picker.setMinValue(1); + picker.setMaxValue(20); + picker.setValue(km.getweeknum(new SimpleDateFormat("yyyy-M-d").format(currentWeekDate))); + + new AlertDialog.Builder(requireContext()) + .setTitle("选择周次") + .setView(picker) + .setPositiveButton("确定", (dialog, which) -> { + int week = picker.getValue(); + try { + currentWeekDate = km.getweekdate(week); + displaylesson(currentWeekDate); + } catch (ParseException ignored) {} + }) + .setNegativeButton("取消", null) + .show(); + } + + public void weekclick(View view) { + Button weekButton = view.findViewById(R.id.button3); + showWeekPickerDialog(weekButton); + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + km = new kebiaoManager(requireContext()); + + return inflater.inflate(R.layout.fragment_schedule, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + tv = view; + + Button button = view.findViewById(R.id.button3); + button.setOnClickListener(this::weekclick); + + popupOverlay = view.findViewById(R.id.frameLayout2); + popupOverlay.setVisibility(View.GONE); + popupOverlay.setOnClickListener(v -> popupOverlay.setVisibility(View.GONE)); + + GridLayout gridLayout = view.findViewById(R.id.timetable_container); + gridLayout.removeAllViews(); + alltext.clear(); + + for (int row = 0; row < 13; row++) { + for (int col = 0; col < 7; col++) { + TextView cell = new TextView(requireContext()); + GridLayout.LayoutParams param = new GridLayout.LayoutParams(); + param.width = 0; + param.height = 0; + param.rowSpec = GridLayout.spec(row, 1f); + param.columnSpec = GridLayout.spec(col, 1f); + + param.setMargins(6, 6, 6, 6); // 上、左、下、右 各 6dp 间距 + + cell.setLayoutParams(param); + cell.setTextSize(12); + cell.setText(""); + cell.setBackgroundColor(Color.WHITE); + cell.setGravity(Gravity.CENTER); + gridLayout.addView(cell); + alltext.add(cell); + } + } + + for (int i = 9; i <= 24; i++) { + int resID = getResources().getIdentifier("button" + i, "id", requireContext().getPackageName()); + Button bt = view.findViewById(resID); + if (bt != null) { + bt.setOnClickListener(this::changeweekclick); + } + } + + currentWeekDate = firstSunday(new Date()); + displaylesson(currentWeekDate); + } + +}