如何从压延机获得下周的日期

时间:2013-07-25 11:16:03

标签: android calendar

请帮助我,我按照本教程http://www.androidhub4you.com/2012/10/custom-calendar-in-android.html显示横向日历并仅显示当前一周的日期此人帮助修改此代码how to get current week days in calender下面的工作正常下面是他的源代码问题是我是两个新的按钮btnpreviousweek,btnnextweek; 我想在下周和上周日期点击按钮显示我是如何做到的?帮帮我

                         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 HorizontalListView  calendarView;

 Button btnpreviousweek,btnnextweek;


 private GridView calendarView;
 private GridCellAdapter adapter;
 private Calendar _calendar;
 @SuppressLint("NewApi")
 private int month, year;
 private int actualYear, actualMonth, actualDay;
 @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);
 actualYear = year;
 actualMonth = month;
 actualDay = _calendar.get(Calendar.DAY_OF_MONTH);





 Log.d(tag, "Calendar Instance:= " + "Month: " + month + " " + "Year: "
    + year);



 btnpreviousweek = (Button) this.findViewById(R.id.btnpreviousweek);
 btnnextweek = (Button) this.findViewById(R.id.btnnextweek);



  btnpreviousweek.setOnClickListener(new OnClickListener() {

 public void onClick(View arg0) {
    // TODO Auto-generated method stub
 //////////////////////////        what i write here           
   /////////////////////////
 }
     });



   btnnextweek.setOnClickListener(new OnClickListener() {

    public void onClick(View arg0) {
    // TODO Auto-generated method stub
 //////////////////////////        what i write here           
 /////////////////////////
 }
    });





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

 /**
 * 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.setText("(" + theday + ")");

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

1 个答案:

答案 0 :(得分:1)

该实施适用于月视图您需要创建自定义周视图:

这就是我创造的方式:

Calendar calendarGlobal;
prevMonth.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                calendarGlobal.add(Calendar.WEEK_OF_YEAR, -1);
                calculateWeek()
            }
        });


        nextMonth.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
        // TODO Auto-generated method stub
        calendarGlobal = Calendar.getInstance();
        calculateWeek();
            }
        });


private void calculateWeek() {
        // TODO Auto-generated method stub
        days.clear();
        // Set the calendar to monday of the current week
        // calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        DateFormat df = new SimpleDateFormat("dd");
        calendarGlobal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        for (int i = 0; i < 7; i++) {
            days.add(df.format(calendarGlobal.getTime()));
            calendarGlobal.add(Calendar.DATE, 1);
        }


    }

一旦你将textview的值设置为textview.settext(days.get(0))为星期一等等