2013-03-11 7 views
6

Ich habe eine Daten-Datenbank, wo ich mehr als ein Datum habe, so möchte ich den Hintergrund aller Daten markieren, die ich aus der Datenbank habe ich versuchte einige Logik, aber es ist hier nicht gelungen, ich lege meinen Code es geht in endlose Schleife.Ich möchte etwas wie diese ausgeben nehme ich Daten wie in der Datenbank 5/3/2013 und 9/3/2013 dann, dass zwei Daten Hintergrund sein sollte Markieren Sie in der Kalenderansicht. i verwendet diesen Link http://www.androidhub4you.com/2012/10/custom-calendar-in-android.html hier ist mein Code:Wie Kalenderdaten hervorheben, die Daten aus der Datenbank stammen

hier in printmonth() Funktion i Änderungen

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; 
    } 

} 

}

Antwort

4

In Ihrem for Schleife, Sie haben Wert der Variablen i neu gestartet. Es sollte in etwa so aussehen:

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(); 
Verwandte Themen