2013-03-11 14 views
6

Birden fazla tarihe sahip olduğum bir tarih veritabanına sahibim, bu yüzden veritabanından aldığım tüm tarihlerin arka planını vurgulamak istiyorum. mantık ama burada başarılı olmadı kodumu sonsuz döngü içinde gider ben bu gibi bir şey istiyorum varsayalım böyle bir şey istiyorum gibi veritabanı 5/3/2013 ve 9/3/2013 gibi tarihler bu iki tarih arka plan olmalıdır Takvim görünümünde vurgulayın. ben burada bu bağlantıyı http://www.androidhub4you.com/2012/10/custom-calendar-in-android.html kullanılan benim kodudur: printmonth buradaVeritabanından hangi tarihlerin geldiğine dair takvim tarihleri ​​nasıl vurgulanır

() fonksiyonu ben senin for döngüde değişiklikleri

public class CalendarActivity extends Activity implements OnClickListener { 
private static final String tag = "CalendarActivity"; 
private TextView currentMonth; 
private Button selectedDayMonthYearButton; 
private ImageView prevMonth; 
private ImageView nextMonth; 
private GridView calendarView; 
private GridCellAdapter adapter; 
private Calendar _calendar; 
@SuppressLint("NewApi") 
private int month, year; 

@SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi" }) 
private final DateFormat dateFormatter = new DateFormat(); 
private static final String dateTemplate = "MMMM yyyy"; 
int i; 
String valuofday; 
int stryear; 
DB_Database db; 
String strmonthvalueofdatabase; 
String[] strdate; 
String value; 
ArrayList<String> arraylist = new ArrayList<String>(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_calendar_view); 
    db = new DB_Database(this); 

    _calendar = Calendar.getInstance(Locale.getDefault()); 
    month = _calendar.get(Calendar.MONTH) + 1; 
    year = _calendar.get(Calendar.YEAR); 
    // Log.d(tag, "Calendar Instance:= " + "Month: " + month + " " + 
    // "Year: " 
    // + year); 

    selectedDayMonthYearButton = (Button) this 
      .findViewById(R.id.selectedDayMonthYear); 
    selectedDayMonthYearButton.setText("Selected: "); 

    prevMonth = (ImageView) this.findViewById(R.id.prevMonth); 
    prevMonth.setOnClickListener(this); 

    currentMonth = (TextView) this.findViewById(R.id.currentMonth); 
    currentMonth.setText(DateFormat.format(dateTemplate, 
      _calendar.getTime())); 

    nextMonth = (ImageView) this.findViewById(R.id.nextMonth); 
    nextMonth.setOnClickListener(this); 

    calendarView = (GridView) this.findViewById(R.id.calendar); 

    // Initialised 
    adapter = new GridCellAdapter(getApplicationContext(), 
      R.id.calendar_day_gridcell, month, year); 
    adapter.notifyDataSetChanged(); 
    calendarView.setAdapter(adapter); 
} 

/** 
* 
* @param month 
* @param year 
*/ 
private void setGridCellAdapterToDate(int month, int year) { 
    adapter = new GridCellAdapter(getApplicationContext(), 
      R.id.calendar_day_gridcell, month, year); 
    _calendar.set(year, month - 1, _calendar.get(Calendar.DAY_OF_MONTH)); 
    currentMonth.setText(DateFormat.format(dateTemplate, 
      _calendar.getTime())); 
    adapter.notifyDataSetChanged(); 
    calendarView.setAdapter(adapter); 
} 

@Override 
public void onClick(View v) { 
    if (v == prevMonth) { 
     if (month <= 1) { 
      month = 12; 
      year--; 
     } else { 
      month--; 
     } 
     // Log.d(tag, "Setting Prev Month in GridCellAdapter: " + "Month: " 
     // + month + " Year: " + year); 
     setGridCellAdapterToDate(month, year); 
    } 
    if (v == nextMonth) { 
     if (month > 11) { 
      month = 1; 
      year++; 
     } else { 
      month++; 
     } 
     // Log.d(tag, "Setting Next Month in GridCellAdapter: " + "Month: " 
     // + month + " Year: " + year); 
     setGridCellAdapterToDate(month, year); 
    } 

} 

@Override 
public void onDestroy() { 
    // Log.d(tag, "Destroying View ..."); 
    super.onDestroy(); 
} 

// Inner Class 
public class GridCellAdapter extends BaseAdapter implements OnClickListener { 
    private static final String tag = "GridCellAdapter"; 
    private final Context _context; 
    private final List<String> list; 
    private static final int DAY_OFFSET = 1; 
    private final String[] weekdays = new String[] { "Sun", "Mon", "Tue", 
      "Wed", "Thu", "Fri", "Sat" }; 
    private final String[] months = { "January", "February", "March", 
      "April", "May", "June", "July", "August", "September", 
      "October", "November", "December" }; 
    private final int[] daysOfMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 
      31, 30, 31 }; 
    private int daysInMonth; 
    private int currentDayOfMonth; 
    private int currentWeekDay; 
    private Button gridcell; 
    private TextView num_events_per_day; 
    private final HashMap<String, Integer> eventsPerMonthMap; 
    private final SimpleDateFormat dateFormatter = new SimpleDateFormat(
      "dd-MMM-yyyy"); 

    // Days in Current Month 
    public GridCellAdapter(Context context, int textViewResourceId, 
      int month, int year) { 
     super(); 
     this._context = context; 
     this.list = new ArrayList<String>(); 
     // Log.d(tag, "==> Passed in Date FOR Month: " + month + " " 
     // + "Year: " + year); 
     Calendar calendar = Calendar.getInstance(); 
     setCurrentDayOfMonth(calendar.get(Calendar.DAY_OF_MONTH)); 
     setCurrentWeekDay(calendar.get(Calendar.DAY_OF_WEEK)); 
     stryear = calendar.get(Calendar.YEAR); 
     // Log.d(tag, "New Calendar:= " + calendar.getTime().toString()); 
     // Log.d(tag, "CurrentDayOfWeek :" + getCurrentWeekDay()); 
     // Log.d(tag, "CurrentDayOfMonth :" + getCurrentDayOfMonth()); 
     printMonth(month, year); 

     eventsPerMonthMap = findNumberOfEventsPerMonth(year, month); 
    } 

    private String getMonthAsString(int i) { 
     return months[i]; 
    } 

    private String getWeekDayAsString(int i) { 
     return weekdays[i]; 
    } 

    private int getNumberOfDaysOfMonth(int i) { 
     return daysOfMonth[i]; 
    } 

    public String getItem(int position) { 
     return list.get(position); 
    } 

    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    /** 
    * Prints Month 
    * 
    * @param mm 
    * @param yy 
    */ 
    private void printMonth(int mm, int yy) { 
     // Log.d(tag, "==> printMonth: mm: " + mm + " " + "yy: " + yy); 
     // The number of days to leave blank at 
     // the start of this month. 

     int trailingSpaces = 0; 
     int daysInPrevMonth = 0; 
     int prevMonth = 0; 
     int prevYear = 0; 
     int nextMonth = 0; 
     int nextYear = 0; 

     int currentMonth = mm - 1; 
     String currentMonthName = getMonthAsString(currentMonth); 
     daysInMonth = getNumberOfDaysOfMonth(currentMonth); 

     // Log.d(tag, "Current Month: " + " " + currentMonthName + 
     // " having " 
     // + daysInMonth + " days."); 

     // Gregorian Calendar : MINUS 1, set to FIRST OF MONTH 
     GregorianCalendar cal = new GregorianCalendar(yy, currentMonth, 1); 
     // Log.d(tag, "Gregorian Calendar:= " + cal.getTime().toString()); 

     if (currentMonth == 11) { 
      prevMonth = currentMonth - 1; 
      daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth); 
      nextMonth = 0; 
      prevYear = yy; 
      nextYear = yy + 1; 
      // Log.d(tag, "*->PrevYear: " + prevYear + " PrevMonth:" 
      // + prevMonth + " NextMonth: " + nextMonth 
      // + " NextYear: " + nextYear); 
     } else if (currentMonth == 0) { 
      prevMonth = 11; 
      prevYear = yy - 1; 
      nextYear = yy; 
      daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth); 
      nextMonth = 1; 
      // Log.d(tag, "**--> PrevYear: " + prevYear + " PrevMonth:" 
      // + prevMonth + " NextMonth: " + nextMonth 
      // + " NextYear: " + nextYear); 
     } else { 
      prevMonth = currentMonth - 1; 
      nextMonth = currentMonth + 1; 
      nextYear = yy; 
      prevYear = yy; 
      daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth); 
      // Log.d(tag, "***---> PrevYear: " + prevYear + " PrevMonth:" 
      // + prevMonth + " NextMonth: " + nextMonth 
      // + " NextYear: " + nextYear); 
     } 

     // Compute how much to leave before before the first day of the 
     // month. 
     // getDay() returns 0 for Sunday. 
     int currentWeekDay = cal.get(Calendar.DAY_OF_WEEK) - 1; 
     String strcurrentweekdat = Integer.toString(currentWeekDay); 
     Log.v("currentweekdays", strcurrentweekdat); 
     trailingSpaces = currentWeekDay; 

     // Log.d(tag, "Week Day:" + currentWeekDay + " is " 
     // + getWeekDayAsString(currentWeekDay)); 
     // Log.d(tag, "No. Trailing space to Add: " + trailingSpaces); 
     // Log.d(tag, "No. of Days in Previous Month: " + daysInPrevMonth); 

     if (cal.isLeapYear(cal.get(Calendar.YEAR)) && mm == 1) { 
      ++daysInMonth; 
     } 

     // Trailing Month days 
     for (int i = 0; i < trailingSpaces; i++) { 
      // Log.d(tag, 
      // "PREV MONTH:= " 
      // + prevMonth 
      // + " => " 
      // + getMonthAsString(prevMonth) 
      // + " " 
      // + String.valueOf((daysInPrevMonth 
      // - trailingSpaces + DAY_OFFSET) 
      // + i)); 
      list.add(String 
        .valueOf((daysInPrevMonth - trailingSpaces + DAY_OFFSET) 
          + i) 
        + "-GREY" 
        + "-" 
        + getMonthAsString(prevMonth) 
        + "-" 
        + prevYear); 

     } 
     String strcurrentmonth = getMonthAsString(currentMonth); 
     Log.v("strcurrentmonth", strcurrentmonth); 

     String strcurrentyear = Integer.toString(stryear); 
     Log.v("strcurrentmonth", strcurrentyear); 

     // for database file 

     SQLiteDatabase sqlitedatabase = db.getReadableDatabase(); 
     Cursor cursor = sqlitedatabase.query(DB_Database.REPORT, null, 
       null, null, null, null, null); 

     int hilihgtedDate = 0; 

     // get array of hilighted dates... 
     ArrayList<String> arraylist = new ArrayList<String>(); 

     // get array of hilighted dates... 
     cursor.moveToFirst(); 
     do { 
      arraylist.add(cursor.getString(cursor 
        .getColumnIndex(DB_Database.REPORT_MEDICINE_DATE))); 
      hilihgtedDate++; 
     } while (cursor.moveToNext() == true); 

     // now that you have the dates to be hilighted, create the month 
     // view as you were doing previously, 
     // Trailing Month days 
     for (int i = 0; i < trailingSpaces; i++) { 
      Log.d(tag, 
        "PREV MONTH:= " 
          + prevMonth 
          + " => " 
          + getMonthAsString(prevMonth) 
          + " " 
          + String.valueOf((daysInPrevMonth 
            - trailingSpaces + DAY_OFFSET) 
            + i)); 
      list.add(String 
        .valueOf((daysInPrevMonth - trailingSpaces + DAY_OFFSET) 
          + i) 
        + "-GREY" 
        + "-" 
        + getMonthAsString(prevMonth) 
        + "-" 
        + prevYear); 
     } 

     int k = 0; 
     // Current Month Days 
     for (i = 1; i <= daysInMonth; i++) { 

      // prevents un-ncesessart splitting steps... 
      if (k <= hilihgtedDate) { 
       /* 
       * checks if current date is equal to 1st hilighted date... 
       * if yes, then hilight the date and get the next hilihgted 
       * date, if no, then just add that date 
       */ 
       Log.v("string arraylist", arraylist.get(i)); 
       String[] splitstrdate = arraylist.get(k).split("/"); 

       String splitstrday = splitstrdate[0]; 
       Log.v("splitstrday", splitstrday); 
       int intsplitstrday = Integer.parseInt(splitstrday); 

       String splitstrmonth = splitstrdate[1]; 
       int intmonth = Integer.parseInt(splitstrmonth); 

       int newintvalue = intmonth - 1; 
       String splitstryear = splitstrdate[2]; 
       int intsplitstryear = Integer.parseInt(splitstryear); 
       for (i = 0; i < newintvalue; i++) { 
        String strone = Integer.toString(newintvalue); 
        strone = months[i]; 
        Log.v("strone", strone); 
       } 
       Log.v("month value", months[i].toString()); 
       String strentermonth = months[i].toString(); 

       if (i == intsplitstrday && strcurrentmonth == strentermonth 
         && year == intsplitstryear) { 
        list.add(String.valueOf(i) + "-BLUE" + "-" 
          + getMonthAsString(currentMonth) + "-" + yy); 
        k++; 
       } else { 
        list.add(String.valueOf(i) + "-WHITE" + "-" 
          + getMonthAsString(currentMonth) + "-" + yy); 
       } 
      } else { 
       /* 
       * There are no more hilighted dates, so no need to split 
       * the date and do the checking, simply write the dates as 
       * they are... 
       */ 
       list.add(String.valueOf(i) + "-WHITE" + "-" 
         + getMonthAsString(currentMonth) + "-" + yy); 
      } 
     } 

     // Leading Month days 
     for (int i = 0; i < list.size() % 7; i++) { 
      Log.d(tag, "NEXT MONTH:= " + getMonthAsString(nextMonth)); 
      list.add(String.valueOf(i + 1) + "-GREY" + "-" 
        + getMonthAsString(nextMonth) + "-" + nextYear); 
     } 

    } 

    /** 
    * NOTE: YOU NEED TO IMPLEMENT THIS PART Given the YEAR, MONTH, retrieve 
    * ALL entries from a SQLite database for that month. Iterate over the 
    * List of All entries, and get the dateCreated, which is converted into 
    * day. 
    * 
    * @param year 
    * @param month 
    * @return 
    */ 

    private HashMap<String, Integer> findNumberOfEventsPerMonth(int year, 
      int month) { 
     HashMap<String, Integer> map = new HashMap<String, Integer>(); 

     return map; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     if (row == null) { 
      LayoutInflater inflater = (LayoutInflater) _context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.screen_gridcell, parent, false); 
     } 

     // Get a reference to the Day gridcell 
     gridcell = (Button) row.findViewById(R.id.calendar_day_gridcell); 
     gridcell.setOnClickListener(this); 
     // ACCOUNT FOR SPACING 

     // Log.d(tag, "Current Day: " + getCurrentDayOfMonth()); 
     String[] day_color = list.get(position).split("-"); 
     Log.v("string value", day_color[1]); 
     // Log.v("day",valuofday); 

     String theday = day_color[0]; 
     String themonth = day_color[2]; 
     String theyear = day_color[3]; 

     if ((!eventsPerMonthMap.isEmpty()) && (eventsPerMonthMap != null)) { 
      if (eventsPerMonthMap.containsKey(theday)) { 
       num_events_per_day = (TextView) row 
         .findViewById(R.id.num_events_per_day); 
       Integer numEvents = (Integer) eventsPerMonthMap.get(theday); 
       num_events_per_day.setText(numEvents.toString()); 
      } 
     } 
     // Set the Day GridCell 
     gridcell.setText(theday); 

     gridcell.setTag(theday + "-" + themonth + "-" + theyear); 

     // Log.d(tag, "Setting GridCell " + theday + "-" + themonth + "-" 
     // + theyear); 
     Log.v("str daycolor", day_color[1]); 

     if (day_color[1].equals("GREY")) { 
      gridcell.setTextColor(getResources() 
        .getColor(R.color.lightgray)); 
     } 
     if (day_color[1].equals("WHITE")) { 
      gridcell.setTextColor(getResources().getColor(
        R.color.lightgray02)); 
     } 
     if (day_color[1].equals("BLUE")) { 
      gridcell.setBackgroundColor(getResources().getColor(
        R.color.orrange)); 
     } 
     return row; 
    } 

    @Override 
    public void onClick(View view) { 
     String date_month_year = (String) view.getTag(); 
     selectedDayMonthYearButton.setText("Selected: " + date_month_year); 
     // Log.e("Selected date", date_month_year); 
     try { 
      Date parsedDate = dateFormatter.parse(date_month_year); 
      // Log.d(tag, "Parsed Date: " + parsedDate.toString()); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 
    public int getCurrentDayOfMonth() { 
     return currentDayOfMonth; 
    } 

    private void setCurrentDayOfMonth(int currentDayOfMonth) { 
     this.currentDayOfMonth = currentDayOfMonth; 
    } 

    public void setCurrentWeekDay(int currentWeekDay) { 
     this.currentWeekDay = currentWeekDay; 
    } 

    public int getCurrentWeekDay() { 
     return currentWeekDay; 
    } 

} 

}

cevap

4

yapılan değişken i değerini yeniden başlattık. Böyle bir şeye benzemelidir:

int j = 0; 
for (; j < newintvalue; j++) { 
    String strone = Integer.toString(newintvalue); 
    strone = months[j]; 
    Log.v("strone", strone); 
} 
Log.v("month value", months[j].toString()); 
String strentermonth = months[j].toString(); 
İlgili konular