0

请任何人帮助我。我发布了很多次没有人帮助我我的问题很简单这是示例代码http://www.androidhub4you.com/2012/10/custom-calendar-in-android.html#comment-form

它在gridview中显示日历,但我的要求是仅当用户单击按钮显示下周日期时才显示当前日期,见下文

       21 is current date of month

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

      when clickon nextweewk button     show dates like that 

           Sun  Mon tues  Wed  Thurs  Fri  Sat
           25   26   27   28   29     30    31


   below is complete source code






                    @TargetApi(3)
  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);

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

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

1 回答 1

0

<LinearLayout
    android:id="@+id/buttonlayout"
    android:layout_width="fill_parent"
    android:layout_height="60sp"
    android:background="@drawable/topbar"
    android:gravity="left|top"
    android:height="60sp"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/settings"
        android:layout_width="54sp"
        android:layout_height="60sp"
        android:background="@drawable/meenu" />

    <ImageView
        android:id="@+id/prevMonth"
        android:layout_width="20sp"
        android:layout_height="fill_parent"
        android:layout_gravity="center"
        android:layout_marginLeft="10sp"
        android:src="@drawable/calendar_left_arrow_selector" >
    </ImageView>

    <TextView
        android:id="@+id/currentMonth"
        android:layout_width="fill_parent"
        android:layout_height="60sp"
        android:layout_weight="0.6"
        android:gravity="center"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#FFFFFF" >
    </TextView>

    <ImageView
        android:id="@+id/nextMonth"
        android:layout_width="20sp"
        android:layout_height="fill_parent"
        android:layout_gravity="center"
        android:layout_marginRight="10sp"
        android:src="@drawable/calendar_right_arrow_selector" >
    </ImageView>

    <Button
        android:id="@+id/addEvent"
        android:layout_width="54sp"
        android:layout_height="60sp"
        android:background="@drawable/plus" />
</LinearLayout>

<Button
    android:id="@+id/selectedDayMonthYear"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/calendar_top_header"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="#FFFFFF" >
</Button>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center" >

    <ImageView
        android:id="@+id/calendarheader"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/calendar_days" >
    </ImageView>
</LinearLayout>

<GridView
    android:id="@+id/calendar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:numColumns="7" >
</GridView>

于 2013-07-26T07:21:48.500 回答