如何在Android中刷新GridView从服务器加载数据

时间:2018-08-24 07:05:15

标签: java android gridview calendar adapter

我正在使用这种布局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();
        }
    });

}

很抱歉,由于长度限制,我无法在此处发布所有代码。预先感谢

0 个答案:

没有答案