如何让在日历本周天周天、日历

2023-09-13 23:59:42 作者:/

我用这个例子code HTTP: //www.androidhub4you.com/2012/10/custom-calendar-in-android.html 的我要显示在GridView中只有currrent每月的天数。我describle我下面的问题。请帮帮我。我只是瓦纳显示当前工作日。

假设今天的日期是7月21日和周三网格显示单行这个值

 周日周一周二周三周四周五周六
 18 19 20(21)22 23 24
 

但我的code将只显示该值

 周日周一周二周三周四周五周六
 1 2 3 4 5 6 7
 

我改变这个code形式例如code

  //当月天
 的for(int i = 1; I< = daysInMonth;我++){
 Log.d(currentMonthName,将String.valueOf(ⅰ)+
  + getMonthAsString(currentMonth)++ YY);
如果(ⅰ== getCurrentDayOfMonth()){
 list.add(将String.valueOf(ⅰ)+蓝+ - 
   + getMonthAsString(currentMonth)+ - + YY);
 } 其他 {
 list.add(将String.valueOf(ⅰ)+-WHITE+ - 
   + getMonthAsString(currentMonth)+ - + YY);
 }
 
郑州春节假期限行日历发布,本周日限行

本code

  //当月天
        的for(int i = 1; I< = currentWeekDay;我++){
            Log.d(currentMonthName,将String.valueOf(ⅰ)+
                    + getMonthAsString(currentMonth)++
  YY);
            如果(ⅰ== getCurrentDayOfMonth()){
                list.add(将String.valueOf(ⅰ)+蓝+ - 
                        + getMonthAsString(currentMonth)+
      - + YY);
            } 其他 {
                list.add(将String.valueOf(ⅰ)+-WHITE+ - 
                        + getMonthAsString(currentMonth)+
  - + YY);
            }







         ///////完整的源$ C ​​$ C低于////////////






           公共类MyCalendarActivity扩展活动器具
   OnClickListener {
私有静态最后字符串变量=MyCalendarActivity;

私人TextView的currentMonth;
私人按钮selectedDayMonthYearButton;
私人ImageView的prevMonth;
私人ImageView的nextMonth;


 私人的GridView calendarView;
私人GridCellAdapter适配器;
私人日历_calendar;
@燮pressLint(NewApi)
私人诠释月,年;
@燮pressWarnings(未使用)
@燮pressLint({NewApi,NewApi,NewApi,NewApi})
私人最终日期格式dateFormatter =新的日期格式();
私有静态最后弦乐dateTemplate =MMMM YYYY;

/ **第一次创建活动时调用。 * /
@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.my_calendar_view);

    _calendar = Calendar.getInstance(Locale.getDefault());
    一个月= _calendar.get(Calendar.MONTH)+ 1;
    年= _calendar.get(Calendar.YEAR);
    Log.d(标签,日历实例:=+月:+月++年
            +一年);

    selectedDayMonthYearButton =(按钮),这
            .findViewById(R.id.selectedDayMonthYear);
    selectedDayMonthYearButton.setText(选择);

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

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

    nextMonth =(ImageView的)this.findViewById(R.id.nextMonth);
    nextMonth.setOnClickListener(本);
    calendarView =(GridView控件)this.findViewById(R.id.calendar);



    适配器=新GridCellAdapter(getApplicationContext()
            R.id.calendar_day_gridcell,月,年);
    adapter.notifyDataSetChanged();
    calendarView.setAdapter(适配器);
}

/ **
 *
 * @参数一个月
 * @参数年
 * /
私人无效setGridCellAdapterToDate(INT月,年整型){
    适配器=新GridCellAdapter(getApplicationContext()
            R.id.calendar_day_gridcell,月,年);
    _calendar.set(年,月 -  1,_calendar.get(Calendar.DAY_OF_WEEK));
    currentMonth.setText(DateFormat.format(dateTemplate,
            _calendar.getTime()));
    adapter.notifyDataSetChanged();
    calendarView.setAdapter(适配器);
}

@覆盖
公共无效的onClick(视图v){
    如果(V = = prevMonth){
        如果(月&其中; = 1){
            月= 12;
            年 - ;
        } 其他 {
            月 - ;
        }
        Log.d(标签,设置$ P $光伏本月GridCellAdapter:+月
                +月+年+一年);
        setGridCellAdapterToDate(月,年);
    }
    如果(V == nextMonth){
        如果(月> 11){
            一个月= 1;
            今年++;
        } 其他 {
            一个月++;
        }
        Log.d(标签,在GridCellAdapter设置下个月:+月
                +月+年+一年);
        setGridCellAdapterToDate(月,年);
    }

}

@覆盖
公共无效的onDestroy(){
    Log.d(标签,销毁查看......);
    super.onDestroy();
}

//内部类
公共类GridCellAdapter扩展了BaseAdapter实现OnClickListener {
    私有静态最后字符串变量=GridCellAdapter;
    私人最终语境_context;

    私人最终名单,其中,字符串>清单;
    私有静态最终诠释DAY_OFFSET = 1;
    私人最终的String []平日=新的String [] {太阳报,星期一,星期二,
            星期三,星期四,星期五,星期六};
    私人最终的String []月= {一月,二月,月,
            四五,五一,六一,七一,八一,月,
            十月,月,十二月};
    私人最终诠释[] daysOfMonth = {31,28,31,30,31,30,31,31,30,
            31,30,31};
    私人诠释daysInMonth;
    私人诠释currentDayOfMonth;
    私人诠释currentWeekDay;
    私人按钮栅格单元;
    私人TextView的num_events_per_day;
    私人最终的HashMap<字符串,整数> eventsPerMonthMap;
    私人最终SimpleDateFormat的dateFormatter =新的SimpleDateFormat(
            DD-MMM-YYYY);

    当月//天
    公共GridCellAdapter(上下文的背景下,INT textViewResourceId,
            INT月,年整型){
        超();
        this._context =背景;
        this.list =新的ArrayList<字符串>();
        Log.d(标签,==>传递日期月份:+月+
                +年+一年);
        台历挂历= Calendar.getInstance();
        setCurrentDayOfMonth(calendar.get(Calendar.DAY_OF_MONTH));
        setCurrentWeekDay(calendar.get(Calendar.DAY_OF_WEEK));
        Log.d(标签,新的日历:=+ calendar.getTime()的toString());
        Log.d(标签,CurrentDayOfWeek:+ getCurrentWeekDay());
        Log.d(标签,CurrentDayOfMonth:+ getCurrentDayOfMonth());

        //打印月份
        printMonth(月,年);

        //查找事件数
        eventsPerMonthMap = findNumberOfEventsPerMonth(年,月);
    }

    私人字符串getMonthAsString(int i)以{
        回个月[I]
    }

    私人字符串getWeekDayAsString(int i)以{
        返回平日[I]
    }

    私人诠释getNumberOfDaysOfMonth(int i)以{
        返回daysOfMonth [I]
    }

    公共字符串的getItem(INT位置){
        返回list.get(位置);
    }

    @覆盖
    公众诠释getCount将(){
        返回则为list.size();
    }

    / **
     *打印月
     *
     * @参数毫米
     * @参数YY
     * /
    私人无效printMonth(INT毫米,诠释YY){
        Log.d(标签,==> printMonth:MM:+毫米++YY:+ YY);
        INT trailingSpaces = 0;
        INT daysIn prevMonth = 0;
        INT prevMonth = 0;
        INT prevYear = 0;
        INT nextMonth = 0;
        INT nextYear = 0;

        INT currentMonth =毫米 -  1;
        字符串currentMonthName = getMonthAsString(currentMonth);
        daysInMonth = getNumberOfDaysOfMonth(currentMonth);

        Log.d(标签,当前月份:++ currentMonthName +具有
                + daysInMonth +的日子。);

        GregorianCalendar的CAL =新的GregorianCalendar(YY,currentMonth,1);
        Log.d(标签,公历:=+ cal.getTime()的toString());

        如果(currentMonth == 11){
            prevMonth = currentMonth  -  1;
            daysIn prevMonth = getNumberOfDaysOfMonth(prevMonth);
            nextMonth = 0;
            prevYear = YY;
            nextYear = YY + 1;
            Log.d(标签,*  - > prevYear:+ prevYear +prevMonth:
                    + prevMonth +NextMonth:+ nextMonth
                    +NextYear:+ nextYear);
        }否则,如果(currentMonth == 0){
            prevMonth = 11;
            prevYear = YY  -  1;
            nextYear = YY;
            daysIn prevMonth = getNumberOfDaysOfMonth(prevMonth);
            nextMonth = 1;
            Log.d(标签,**  - > prevYear:+ prevYear +prevMonth:
                    + prevMonth +NextMonth:+ nextMonth
                    +NextYear:+ nextYear);
        } 其他 {
            prevMonth = currentMonth  -  1;
            nextMonth = currentMonth + 1;
            nextYear = YY;
            prevYear = YY;
            daysIn prevMonth = getNumberOfDaysOfMonth(prevMonth);
            Log.d(标签,***  - > prevYear:+ prevYear +prevMonth:
                    + prevMonth +NextMonth:+ nextMonth
                    +NextYear:+ nextYear);
        }

        INT currentWeekDay = cal.get(Calendar.DAY_OF_WEEK) -  1;
        trailingSpaces = currentWeekDay;

        Log.d(标签,周日:+ currentWeekDay +是
                + getWeekDayAsString(currentWeekDay));
        Log.d(标签,号尾部的空格添加+ trailingSpaces);
        Log.d(标签,天在previous月号:+ daysIn prevMonth);

        如果(cal.isLeapYear(cal.get(Calendar.YEAR)))
            如果(毫米== 2)
                ++ daysInMonth;
            否则,如果(毫米== 3)
                ++ daysIn prevMonth;

        //尾随月天
        的for(int i = 0; I< trailingSpaces;我++){
            Log.d(标签,
                    $ P $的pV月:=
                            + prevMonth
                            +=>中
                            +
 getMonthAsString(prevMonth)
                            +
                            +
  将String.valueOf((daysIn prevMonth
                                     - 
 trailingSpaces + DAY_OFFSET)
                                    + I));
            list.add(字符串
                    .valueOf((daysIn prevMonth  -  trailingSpaces
   + DAY_OFFSET)
                            + i)产品
                    +-grey
                    + - 
                    + getMonthAsString(prevMonth)
                    + - 
                    + prevYear);
        }

        //当月天
        的for(int i = 1; I< = currentWeekDay;我++){
            Log.d(currentMonthName,将String.valueOf(ⅰ)+
                    + getMonthAsString(currentMonth)++
YY);
            如果(ⅰ== getCurrentDayOfMonth()){
                list.add(将String.valueOf(ⅰ)+蓝+ - 
                        + getMonthAsString(currentMonth)+
   - + YY);
            } 其他 {
                list.add(将String.valueOf(ⅰ)+-WHITE+ - 
                        + getMonthAsString(currentMonth)+
      - + YY);
            }
        }

        //领导每月的天数
        的for(int i = 0; I<则为list.size()%7;我++){
            Log.d(标签,下个月:=+ getMonthAsString(nextMonth));
            list.add(将String.valueOf第(i + 1)+-grey+ - 
                    + getMonthAsString(nextMonth)+ - +
   明年);
        }
    }

    / **
     *注意:您需要实现鉴于YEAR本部,月,检索
     *从SQLite数据库在该月所有条目。遍历
     的所有条目*列表,并获得dateCreated会,被转换成
     * 日。
     *
     * @参数年
     * @参数一个月
     * @返回
     * /
    私人的HashMap<字符串,整数> findNumberOfEventsPerMonth(INT年,
            月整型){
        HashMap的<字符串,整数>图=新的HashMap<字符串,整数>();

        返回地图;
    }

    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }

    @覆盖
    公共查看getView(INT位置,查看convertView,ViewGroup中父){
        查看排= convertView;
        如果(行== NULL){
            LayoutInflater充气=(LayoutInflater)_context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            行= inflater.inflate(R.layout.screen_gridcell,父母,
假);
        }

        //获取一个参考日栅格单元
        栅格单元=(按钮)row.findViewById(R.id.calendar_day_gridcell);
        gridcell.setOnClickListener(本);

        //占间距

        Log.d(标签,当前日期:+ getCurrentDayOfMonth());
        的String [] day_color = list.get(位置).split( - );
        串theday = day_color [0];
        串themonth = day_color [2];
        串theyear = day_color [3];
        如果((eventsPerMonthMap.isEmpty())及!&安培;!(eventsPerMonthMap =
空值))  {
            如果(eventsPerMonthMap.containsKey(theday)){
                num_events_per_day =(TextView中)一行

   .findViewById(R.id.num_events_per_day);
                整数numEvents =(整数)
    eventsPerMonthMap.get(theday);
                num_events_per_day.setText(numEvents.toString());
            }
        }

        //设置日栅格单元
        gridcell.setText(theday);
        gridcell.setTag(theday + - + themonth + - + theyear);
        Log.d(标签,设置栅格单元+ theday + - + themonth + - 
                + theyear);

        如果(day_color [1] .equals(灰色)){
            gridcell.setTextColor(getResources()
                    .getColor(R.color.lightgray));
        }
        如果(day_color [1] .equals(白)){
            gridcell.setTextColor(getResources()的getColor(
                    R.color.lightgray02));
        }
        如果(day_color [1] .equals(蓝)){

    gridcell.setTextColor(getResources()的getColor(R.color.orrange));
        }
        返回行;
    }

    @覆盖
    公共无效的onClick(视图查看){
        字符串date_month_year =(字符串)view.getTag();
        selectedDayMonthYearButton.setText(选择:+ date_month_year);
        Log.e(选定的日期,date_month_year);
        尝试 {
            日期parsedDate = dateFormatter.parse(date_month_year);
            Log.d(标签,经分析日期:+ parsedDate.toString());

        }赶上(ParseException的E){
            e.printStackTrace();
        }
    }

    公众诠释getCurrentDayOfMonth(){
        返回currentDayOfMonth;
    }

    私人无效setCurrentDayOfMonth(INT currentDayOfMonth){
        this.currentDayOfMonth = currentDayOfMonth;
    }

    公共无效setCurrentWeekDay(INT currentWeekDay){
        this.currentWeekDay = currentWeekDay;
    }

    公众诠释getCurrentWeekDay(){
        返回currentWeekDay;
    }
}
  }
 

解决方案

我希望这是你想要的。

重命名你的printMonth()来printMonth_old() 复制和粘贴如下的printMonth code 在一个行修改getView()方法。 创建活动中的3个变量和修改的onCreate初始化它们 尝试它

有你需要做的,对于eaxmple一些变化时,单击下一步按钮提前一个星期,在当点击preV。按钮回去一个星期。

1)复制并粘贴此code,重命名后您的实际printMonth

 私人无效printMonth(INT毫米,INT日)
    {
        Log.d(标签,==> printMonth:MM:+毫米++YY:+ YY);
        INT trailingSpaces = 0;
        INT daysIn prevMonth = 0;

        INT currentMonth =毫米 -  1;
        字符串currentMonthName = getMonthAsString(currentMonth);
        daysInMonth = getNumberOfDaysOfMonth(currentMonth);

        Log.d(标签,当前月份:++ currentMonthName +具有+ daysInMonth +天);

        GregorianCalendar的CAL =新的GregorianCalendar(YY,currentMonth,getCurrentDayOfMonth());
        Log.d(标签,公历:=+ cal.getTime()的toString());

        INT currentWeekDay = cal.get(Calendar.DAY_OF_WEEK) -  1;
        trailingSpaces = currentWeekDay;

        Log.d(标签,周日:+ currentWeekDay +就是+ getWeekDayAsString(currentWeekDay));
        Log.d(标签,号尾部的空格添加+ trailingSpaces);
        Log.d(标签,天在previous月号:+ daysIn prevMonth);

        如果(cal.isLeapYear(cal.get(Calendar.YEAR)))
            如果(毫米== 2)++ daysInMonth;
            否则,如果(毫米== 3)
                ++ daysIn prevMonth;

        //将在本周末的乞讨
        INT I = getCurrentDayOfMonth();
        INT J = currentWeekDay;
        而(ⅰ→1&安培;&安培; J&0)
        {
            一世 - ;
            j--;
        }
        //打印一周,开始在星期日
        为(J = 0; I< = daysInMonth和放大器;&放大器; J< 7,我++,J ++)
        {
            Log.d(currentMonthName,将String.valueOf(我)++ getMonthAsString(currentMonth)++ YY);
            //如果是当前日期,印刷BLUE(橙色)
            如果(我== actualDay&功放;&安培;毫米== actualMonth和放大器;&安培; YY == actualYear)
            {
                list.add(将String.valueOf(ⅰ)+蓝+ - + getMonthAsString(currentMonth)+ - +日);
            }
            其他
            {
                list.add(将String.valueOf(ⅰ)+-WHITE+ - + getMonthAsString(currentMonth)+ - +日);
            }
        }
    }
 

2)更改getView方法,只添加一行:

 如果(day_color [1] .equals(蓝色))
{
    //只添加以下行
    gridcell.setText((+ theday +));
    gridcell.setTextColor(getResources()的getColor(R.color.orrange));
}
 

3)在活动中加入这一行:

 公共类MyCalendarActivity扩展活动实现OnClickListener
{
    ....
    私人诠释月,年;
    //添加此线下方
    私人诠释actualYear,actualMonth,actualDay;
 

和上的onCreate()中加入这一行,以及:

 公共无效的onCreate(包savedInstanceState)
{
  ....

  一个月= _calendar.get(Calendar.MONTH)+ 1;
  年= _calendar.get(Calendar.YEAR);
  //添加这3行
  actualYear =年;
  actualMonth =月;
  actualDay = _calendar.get(Calendar.DAY_OF_MONTH);
 

I'm using this examplecode http://www.androidhub4you.com/2012/10/custom-calendar-in-android.html I want to show only currrent month days in gridview. I describle my problem below. Help me please. I just wana show current week days.

Suppose today date is 21 july and Wednesday grid show single row with this values

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

but my code will only display this value

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

I change this code form example code

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

with this code

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

解决方案

I hope this is what you want.

Rename your printMonth() to printMonth_old () Copy and paste the printMonth code below Modify the getView() method with one line. Create the 3 variables in the Activity and modify the onCreate to initialize them Try it

There are some changes you need to do, for eaxmple when click the Next Button advance one week and the when click Prev. Button go back one week.

1) Copy and paste this code, after renaming your actual 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) Change the getView method, only add one line:

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

3) On the Activity add this line:

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

And on the onCreate() add these lines as well:

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