2013-07-20 4 views
0

Я использую этот примерный код http://www.androidhub4you.com/2012/10/custom-calendar-in-android.html Я хочу показать только день месяца месяца в gridview. Я описал свою проблему ниже. Помоги мне, пожалуйста. Я просто вана показываю текущие дни недели.Как получить текущие дни недели в календаре

Пусть дата сегодня 21 июля и среда сетки показать один ряд с этим значения

Sun Mon tues Wed Thurs Fri Sat 
18 19 20 (21) 22 23 24 

, но мой код будет отображаться только это значение

Sun Mon tues Wed Thurs Fri Sat 
1 2 3  4  5  6 7 

я изменить этот код формы пример кода

// Current Month Days 
for (int i = 1; i <= daysInMonth; i++) { 
Log.d(currentMonthName, String.valueOf(i) + " " 
    + getMonthAsString(currentMonth) + " " + yy); 
if (i == getCurrentDayOfMonth()) { 
list.add(String.valueOf(i) + "-BLUE" + "-" 
    + getMonthAsString(currentMonth) + "-" + yy); 
} else { 
list.add(String.valueOf(i) + "-WHITE" + "-" 
    + getMonthAsString(currentMonth) + "-" + yy); 
} 

с этим кодом

    // Current Month Days 
     for (int i = 1; i <= currentWeekDay; i++) { 
      Log.d(currentMonthName, String.valueOf(i) + " " 
        + getMonthAsString(currentMonth) + " " + 
    yy); 
      if (i == getCurrentDayOfMonth()) { 
       list.add(String.valueOf(i) + "-BLUE" + "-" 
         + getMonthAsString(currentMonth) + 
    "-" + yy); 
      } else { 
       list.add(String.valueOf(i) + "-WHITE" + "-" 
         + getMonthAsString(currentMonth) + 
"-" + yy); 
      } 







     /////// full source code is below//////////// 






      public class MyCalendarActivity extends Activity implements 
    OnClickListener { 
private static final String tag = "MyCalendarActivity"; 

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; 
@SuppressWarnings("unused") 
@SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi" }) 
private final DateFormat dateFormatter = new DateFormat(); 
private static final String dateTemplate = "MMMM yyyy"; 

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

    _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); 



    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_WEEK)); 
    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)); 
     Log.d(tag, "New Calendar:= " + calendar.getTime().toString()); 
     Log.d(tag, "CurrentDayOfWeek :" + getCurrentWeekDay()); 
     Log.d(tag, "CurrentDayOfMonth :" + getCurrentDayOfMonth()); 

     // Print Month 
     printMonth(month, year); 

     // Find Number of Events 
     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); 
     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."); 

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

     int currentWeekDay = cal.get(Calendar.DAY_OF_WEEK) - 1; 
     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))) 
      if (mm == 2) 
       ++daysInMonth; 
      else if (mm == 3) 
       ++daysInPrevMonth; 

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

     // Current Month Days 
     for (int i = 1; i <= currentWeekDay; i++) { 
      Log.d(currentMonthName, String.valueOf(i) + " " 
        + getMonthAsString(currentMonth) + " " + 
yy); 
      if (i == getCurrentDayOfMonth()) { 
       list.add(String.valueOf(i) + "-BLUE" + "-" 
         + getMonthAsString(currentMonth) + 
    "-" + yy); 
      } else { 
       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("-"); 
     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); 

     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.setTextColor(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; 
    } 
} 
    } 
+0

Есть ли кто-нибудь, кто мне помогает? – user2589245

+0

Конечно, мы можем, но можем ли вы отформатировать код в удобочитаемой форме. Его немного сложно читать. –

+0

просто см. Пример ссылки Я хочу показать onl текущие даты недели в gridview – user2589245

ответ

1

Надеюсь, это то, что вы хотите.

  1. Переименуйте printMonth() в printMonth_old()
  2. Скопируйте и вставьте код ниже printMonth
  3. Измените метод GetView() с одной линией.
  4. Создание 3 переменных в деятельности и модифицировать OnCreate инициализировать их
  5. Попробуйте

Есть некоторые изменения, которые нужно сделать, для eaxmple, когда нажмите кнопку Далее вперед одна неделя и когда нажмите Prev. Кнопка вернется на одну неделю.

1) Скопируйте и вставьте этот код, после переименования фактическая printMonth

private void printMonth(int mm, int yy) 
    { 
     Log.d(tag, "==> printMonth: mm: " + mm + " " + "yy: " + yy); 
     int trailingSpaces = 0; 
     int daysInPrevMonth = 0; 

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

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

     GregorianCalendar cal = new GregorianCalendar(yy, currentMonth, getCurrentDayOfMonth()); 
     Log.d(tag, "Gregorian Calendar:= " + cal.getTime().toString()); 

     int currentWeekDay = cal.get(Calendar.DAY_OF_WEEK) - 1; 
     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))) 
      if (mm == 2) ++daysInMonth; 
      else if (mm == 3) 
       ++daysInPrevMonth; 

     // move at the begging of the week 
     int i = getCurrentDayOfMonth(); 
     int j = currentWeekDay; 
     while (i > 1 && j > 0) 
     { 
      i--; 
      j--; 
     } 
     // print the week, starting at Sunday 
     for (j = 0; i <= daysInMonth && j < 7; i++, j++) 
     { 
      Log.d(currentMonthName, String.valueOf(i) + " " + getMonthAsString(currentMonth) + " " + yy); 
      // If it is the current date, printing in BLUE (Orange) 
      if (i == actualDay && mm == actualMonth && yy == actualYear) 
      { 
       list.add(String.valueOf(i) + "-BLUE" + "-" + getMonthAsString(currentMonth) + "-" + yy); 
      } 
      else 
      { 
       list.add(String.valueOf(i) + "-WHITE" + "-" + getMonthAsString(currentMonth) + "-" + yy); 
      } 
     } 
    } 

2) Измените метод GetView, только добавить одну строку:

if (day_color[1].equals("BLUE")) 
{ 
    // Add only the following line 
    gridcell.setText("(" + theday + ")"); 
    gridcell.setTextColor(getResources().getColor(R.color.orrange)); 
} 

3) О деятельности добавить этот линия:

public class MyCalendarActivity extends Activity implements OnClickListener 
{ 
    .... 
    private int month, year; 
    // add this line below 
    private int actualYear, actualMonth, actualDay; 

а на OnCreate() добавьте эти строки, а также:

public void onCreate(Bundle savedInstanceState) 
{ 
    .... 

    month = _calendar.get(Calendar.MONTH) + 1; 
    year = _calendar.get(Calendar.YEAR); 
    // Add these 3 lines   
    actualYear = year; 
    actualMonth = month; 
    actualDay = _calendar.get(Calendar.DAY_OF_MONTH); 
+0

как загрузить следующую и предыдущую неделю может у меня идея –

Смежные вопросы