我正在使用这种布局Calendar Layout with Gridview
此日历还从服务器加载事件日期。每当我单击下一个按钮(在月份名称的右侧,即更改月份)或每当我选择年份微调项(更改年份)时,日历都应更新。该代码起初可以完美地工作,但是当我单击微调器或下一步按钮时,网格视图不会更改其视图。我已经尝试过在StackOverflow上找到的几种解决方案,但是没有任何效果。
这是我的适配器上的构造函数:
public MonthAdapter(Context c, int month, int year, DisplayMetrics metrics,ArrayList event_Avail) {
mContext = c;
mMonth = month;
mYear = year;
mCalendar = new GregorianCalendar(mYear, mMonth, 1);
mCalendarToday = Calendar.getInstance();
mDisplayMetrics = metrics;
event_avail = event_Avail;
populateMonth();
}
这是我的适配器上的getView方法:
public View getView(int position, View convertView, ViewGroup parent) {
TextView view;
if(convertView == null)
{
view = new TextView(mContext);
view.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
view.setPadding(10,10,10,10);
view.setText(mItems.get(position));
view.setTextColor(Color.BLACK);
}
else
{
view = (TextView) convertView;
}
int[] date = getDate(position);
if (date != null) {
view.setHeight(mDayHeight);
if (date[1] != mMonth) {
} else {
Typeface gibsonbold = Typeface.createFromAsset(mContext.getAssets(), "fonts/gibsonbold.ttf");
view.setTypeface(gibsonbold);
view.setTextColor(mContext.getResources().getColor(R.color.colorWhite));
for(int x=0;x<event_avail.size();x++)
{
if(view.getText().toString().equals(event_avail.get(x)))
{
view.setBackgroundResource(R.drawable.event_available_bg);
}
}
view.setTextSize(16);
if (isToday(date[0], date[1], date[2] )) {
}
}
} else {
Typeface gibsonbold = Typeface.createFromAsset(mContext.getAssets(), "fonts/gibsonbold.ttf");
view.setTypeface(gibsonbold);
view.setTextColor(mContext.getResources().getColor(R.color.colorBlack));
view.setTextSize(16);
view.setHeight(mTitleHeight);
}
onDate(date, position, view);
return view;
}
这是我如何称呼适配器:
public void loadEventAvailable() {
eventInterface = ApiHandler.getApi(getActivity()).create(EventInterface.class);
final Call<EventModel> countryCall = eventInterface.event_available(monthNumber[mToday[1]],yearSelected);
countryCall.enqueue(new Callback<EventModel>() {
@Override
public void onResponse(Call<EventModel> call, Response<EventModel> response) {
try {
if (response.isSuccessful()) {
if (response.body().getSuccess().equals("FAILED")) {
Toast.makeText(getActivity(), response.body().getMessage(), Toast.LENGTH_SHORT).show();
}
else {
List<EventModel.EventList> eventItems = response.body().getData();
eventDate = new ArrayList<>();
eventStatus = new ArrayList<>();
event_avail = new ArrayList<>();
for (int i = 0; i < eventItems.size(); i++){
eventDate.add(eventItems.get(i).getDATE());
eventStatus.add(eventItems.get(i).getAVAILABLE());
if(eventItems.get(i).getAVAILABLE().equals("TRUE"))
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date tgl = sdf.parse(eventItems.get(i).getDATE());
sdf = new SimpleDateFormat("d");
String tgl2 = sdf.format(tgl);
event_avail.add(tgl2);
Log.d(TAG, "isi data ke " + i + " adalah :" + tgl2 + " ukuran =" + event_avail.size());
}
calendar_grid.setAdapter(new MonthAdapter(getActivity(), mToday[1], Integer.parseInt(yearSelected), metrics,event_avail) {
@Override
protected void onDate(int[] date, int position, View item) {
}
});
}
}
} else {
try {
Converter<ResponseBody, ApiError> converter = ApiHandler.getApi(getActivity()).responseBodyConverter(ApiError.class, (java.lang.annotation.Annotation[]) new Annotation[0]);
ApiError error = converter.convert(response.errorBody());
Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(getActivity(), response.errorBody().string(), Toast.LENGTH_SHORT).show();
}
}
} catch (Exception e) {
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<EventModel> call, Throwable t) {
Toast.makeText(getActivity(), t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
很抱歉,由于长度限制,我无法在此处发布所有代码。预先感谢