Caldroid does not refresh



我已经用onCreate方法中的这段代码将Caldroid放在我的活动中。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    app_font = Typeface.createFromAsset(getAssets(), "custom_font.ttf");
    dbHelper = new DatabaseHelper(this);
    caldroidFragment = new CaldroidFragment();
    if (savedInstanceState != null) {
        caldroidFragment.restoreStatesFromKey(savedInstanceState,
                "CALDROID_SAVED_STATE");
    } else {
        Bundle args = new Bundle();
        args.putInt(CaldroidFragment.MONTH, calendar.get(Calendar.MONTH) + 1);
        args.putInt(CaldroidFragment.YEAR, calendar.get(Calendar.YEAR));
        args.putBoolean(CaldroidFragment.ENABLE_SWIPE, true);
        args.putBoolean(CaldroidFragment.SIX_WEEKS_IN_CALENDAR, true);
        args.putInt(CaldroidFragment.START_DAY_OF_WEEK, CaldroidFragment.MONDAY);
        caldroidFragment.setArguments(args);
    }
    FragmentTransaction t = getSupportFragmentManager().beginTransaction();
    t.replace(R.id.calendar_holder, caldroidFragment, FRAGMENT_TAG);
    t.commit();
    fragmentMounted = true;
    CaldroidListener listener = new CaldroidListener() {
        @Override
        public void onSelectDate(Date date, View view) {
            Intent k = new Intent(MainActivity.this, DateActivity.class);
            k.putExtra(TIME, date.getTime());
            MainActivity.this.startActivity(k);
        }
        @Override
        public void onChangeMonth(int month, int year) {
            if (marker != null) {
                marker.stopWorking();
            }
            marker = new DateMarker(MainActivity.this, month, year);
            marker.start();
        }
        @Override
        public void onLongClickDate(Date date, View view) {
            // do nothing
        }
        @Override
        public void onCaldroidViewCreated() {
            // do nothing
        }
    };
    caldroidFragment.setCaldroidListener(listener);
}

正如您所注意到的,每次用户切换到其他月份时,侦听器内部都会调用一个Thread。此线程访问数据库并标记具有事件的日期。

注意:这只是该线程的运行方法内部代码的内部示例。

// more code above
if (MainActivity.dbHelper.getNotesOnDate(date).size() == 0) {
    activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            activity.caldroidFragment.setBackgroundResourceForDate(R.color.SeaGreen, date);
            activity.caldroidFragment.setTextColorForDate(R.color.white, date);
            activity.caldroidFragment.refreshView();
        }
    });
}
//more code under

我在所有这些加载时启动另一个活动供用户登录。问题仅在onCreate方法中用持有人视图替换碎片之前所做的标记。用支架更换后如何刷新caldroidFragment? 放置后refreshView()似乎不起作用。

编辑:我做了研究,我注意到Caldroid正在使用应用程序V4 Fragment。我试图分离并重新附加它以获得刷新效果,但我在尝试这样做时只得到了NullPointerException

我找到了答案,不要使用Java的Date类,它不能正常工作。

使用乔达的DateTime .Caldroid可以很好地使用它。另外,我在数据库访问中发现了小错误,但即使它在那里,它也应该可以工作。

最新更新