我如何在MaterialCalendarView中显示特定日期和时间的事件?

问题描述 投票:1回答:1

我正在测试一个示例应用程序,试图在该应用程序中显示到特定日期的时间和日期。当前,即使事件是一天,它也只能绘制到整个月。假设该活动是在1月5日上午9:30到10:30,那么它将在整个月内显示,而不仅仅是1月5日。想要实现这样的目标:

enter image description here

[目前,即使我的应用程序显示了1月1日或1月8日事件,它也显示了整个月的时间(例如,下面的屏幕截图显示,例如1月15日这周的错误显示,即使这2个事件属于2个不同的日期) :

enter image description here

我正在测试的代码在这里:https://github.com/raghunandankavi2010/SamplesAndroid/tree/master/CalendarTest

唯一不同的是,我在calendar.xml类中添加了:app:mcv_showOtherDates="all"下的<com.prolificinteractive.materialcalendarview.MaterialCalendarView以显示每周视图。另外,在calendarFragment.java类中,有一个名为makeJsonObjectRequest的函数,在其中解析了StartDate,我尝试解析startTime,StartTime,EndTime和EndDate,以将事件分别映射到日期,但是并没有做很多事情。

 String EndDate = jsonObject.getString("EndTime");
                Date date = simpleDateFormat.parse(EndDate);

                String title =  jsonObject.getString("Title");

                Log.d("EndDate ",""+date);
                CalendarDay day = CalendarDay.from(date);
                Event event = new Event(date,title);
                cal = Calendar.getInstance();
                cal.setTime(date);
                int month = cal.get(Calendar.DAY_OF_THE_MONTH); 

任何想法都可以解决并更新代码,这样我就可以显示对应于当月月份和特定时间范围内的事件(如上面的Outlook屏幕快照(第一个屏幕快照)所示),而不是整个月?(此外,json类为testjson.json并包含在项目资产文件夹中)

谢谢!

java android material-design android-calendar android-json
1个回答
0
投票

回购中的示例使用月份过滤事件。您需要按日历日过滤事件并在onDateSelected中更新列表视图,以便在用户选择其他日期时更新列表视图。您应该得到这样的内容:

public class CalendarFragment extends Fragment implements OnDateSelectedListener {


    private MaterialCalendarView calendarView;
    private HashMap<CalendarDay,List<Event>> map = new HashMap<>();
    private ListView listView;
    private MyAdapter adapter;


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

        View view = inflater.inflate(R.layout.calendar, container, false);

        listView = view.findViewById(R.id.listview);

        adapter = new MyAdapter(getActivity(),new ArrayList<Event>());
        listView.setAdapter(adapter);

        calendarView =  view.findViewById(R.id.calendarView);
        calendarView.setDateTextAppearance(View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE);

        calendarView.setSelectedDate(LocalDate.now());

        calendarView.setOnDateChangedListener(this);

        makeJsonObjectRequest();

        return view;
    }




    private void makeJsonObjectRequest() {

        String response = loadJSONFromAsset();
        try {
            JSONArray jArray = new JSONArray(response);
            for (int i = 0; i < jArray.length(); i++) {
                JSONObject jsonObject = jArray.getJSONObject(i);
                String StartDate = jsonObject.getString("StartDate");
                LocalDate date = LocalDate.parse(StartDate, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss",Locale.US));

                String title =  jsonObject.getString("Title");

                Log.d("Date ",""+date);
                CalendarDay day = CalendarDay.from(date);
                Event event = new Event(date,title);


                if(!map.containsKey(day))
                {
                    List<Event> events = new ArrayList<>();
                    events.add(event);
                    map.put(day,events);
                }else
                {
                    List<Event> events = map.get(day);
                    events.add(event);
                    map.put(day,events);

                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // after parsing
        List<Event> event =  map.get(CalendarDay.from(LocalDate.now()));
        if(event!=null && event.size()>0) {
            adapter.addItems(event);
        }else {
            adapter.clear();
        }

        //add small dots on event days
        EventDecorator eventDecorator = new EventDecorator(Color.RED, map.keySet());
        calendarView.addDecorator(eventDecorator);


    }

    public String loadJSONFromAsset() {
        String json = null;
        try {
            InputStream is = getActivity().getAssets().open("testjson.json");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            json = new String(buffer, "UTF-8");
        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
        return json;
    }

    @Override
    public void onDateSelected(@NonNull MaterialCalendarView widget, @NonNull CalendarDay date, boolean selected) {

        calendarView.setHeaderTextAppearance(R.style.AppTheme);

        List<Event> event =  map.get(date);
        if(event!=null && event.size()>0) {
            adapter.addItems(event);
        }else {
            adapter.clear();
        }
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.