Caldroid 不刷新
Caldroid does not refresh
我已将 Caldroid 放入我的 activity 中,并在 onCreate
方法中使用此代码。
@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
我启动另一个 activity 供用户在所有这些加载时登录。问题仅在于在 onCreate
方法中用支架视图替换片段之前所做的标记。将它替换为它的持有者后如何刷新 caldroidFragment
? refreshView()
放置后似乎不起作用。
编辑:我做了研究,发现 Caldroid 正在使用应用程序 V4 Fragment
。我试图分离并重新连接它以获得刷新效果,但我在尝试这样做时只得到了 NullPointerException
。
找到答案了,不要用Java的Date
class,不对。
使用 Joda 的 DateTime
。 Caldroid 工作正常。另外,我在我的数据库访问中发现了一个小错误,但它应该可以正常工作,即使它在那里。
我已将 Caldroid 放入我的 activity 中,并在 onCreate
方法中使用此代码。
@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
我启动另一个 activity 供用户在所有这些加载时登录。问题仅在于在 onCreate
方法中用支架视图替换片段之前所做的标记。将它替换为它的持有者后如何刷新 caldroidFragment
? refreshView()
放置后似乎不起作用。
编辑:我做了研究,发现 Caldroid 正在使用应用程序 V4 Fragment
。我试图分离并重新连接它以获得刷新效果,但我在尝试这样做时只得到了 NullPointerException
。
找到答案了,不要用Java的Date
class,不对。
使用 Joda 的 DateTime
。 Caldroid 工作正常。另外,我在我的数据库访问中发现了一个小错误,但它应该可以正常工作,即使它在那里。