2015-01-10 2 views
1

onCreate 메서드에이 코드가 포함 된 활동 내에서 Caldroid를 삽입했습니다. 당신이 발견으로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 다른 달 때마다 사용자 스위치 수신기 내에서 호출되고있다. 이 스레드는 데이터베이스에 액세스하고 이벤트가있는 날짜를 표시합니다.

참고 :이 코드는 스레드의 run 메소드 내부의 코드 샘플에 불과합니다.

// 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()은 배치 한 후에 작동하지 않는 것 같습니다.

EDIT : 연구를 수행했으며 Caldroid가 앱 V4 Fragment을 사용하고 있음을 확인했습니다. 내가 분리하려고하고 그것을 새로 고치려면 효과를 얻기 위해 다시 첨부하지만, 그것을하려고하는 동안에만 NullPointerException 있어요.

답변

1

나는 대답을 발견했다. 자바의 Date 클래스를 사용하지 말라. 올바르게 작동하지 않는다.

Joda의 DateTime을 사용하십시오. Caldroid 잘 작동합니다. 또한, 내 데이터베이스 액세스에서 사소한 버그를 발견했지만, 거기에 있었는지 그것은 작동해야합니다.

관련 문제