日历活动实施。如何重新加载日历视图? Android的

时间:2014-09-09 18:26:47

标签: java android android-intent calendar

我目前正在开发一款将日历作为其活动之一的Android应用。我的日历工作正常,但我有以下问题:

每个月我都要向API请求事件(我使用AsyncHttpClient来实现这一点),因此每次用户点击按钮查看下个月或上个月时,我都会发出新请求,数据异步并将其保存到数据库中。我正确的做法是为每个新请求启动一个新意图,但这是错误的,因为每次我点击查看不同的月份,如果我点击后退按钮我有一堆相同的实例活动,但我刚看到前几个月。

我真正想做的是"刷新" CalendarActivity包含我刚从请求中获得的新数据,但我不确定如何执行此操作。我尝试将标志FLAG_ACTIVITY_NEW_TASK添加到我意图的标志中,但它没有做我期望的事情。我也尝试放入ProgressDialog并等待请求完成但问题是我在发出请求后仍然执行statActivity,但我不知道我还能做到这一点。

以下是我的一些代码,特别是在请求完成后我获得的代码并且成功了:

AsyncHttpClientManager.java

public static void getCalendar(final int year, final int month,
        final Context context, final Context appContext,
        final ProgressDialog prgDialog) {
    prgDialog.show();
    cookieStore = new PersistentCookieStore(appContext);

    // Change the default timeout from 10secs to 30secs
    // Calendar takes time to load
    client.setTimeout(DEFAULT_TIMEOUT);

    client.setCookieStore(cookieStore);
    client.addHeader("Accept", HEADER);

    RequestParams params = new RequestParams();
    String[] dates = getDate(year, month);

    Log.d(TAG, "start: " + dates[0] + " end: " + dates[1]);
    params.put("start_date", dates[0]);
    params.put("end_date", dates[1]);

    client.get(getAbsoluteUrl(CALENDAR_PATH), params,
            new JsonHttpResponseHandler() {

                @Override
                public void onFailure(int statusCode,
                        org.apache.http.Header[] headers,
                        java.lang.String responseString,
                        java.lang.Throwable throwable) {
                    prgDialog.hide();
                    .....
                }

                @Override
                public void onSuccess(int statusCode, Header[] headers,
                        JSONObject response) {

                    if (statusCode == 200) {
                        prgDialog.hide();
                        Gson gson = new Gson();
                        Calendar calendar = gson.fromJson(
                                response.toString(), Calendar.class);
                        CalendarController.getInstance(context);
                        CalendarController.insertCalendar(calendar);

                        Intent intentC = new Intent(context,
                                CalendarActivity.class);

                        java.util.Calendar current = java.util.Calendar
                                .getInstance();
                        if (current.get(java.util.Calendar.MONTH) + 1 == month
                                && current.get(java.util.Calendar.YEAR) == year) {
                            intentC.putExtra("first_time", true);
                        } else {
                            intentC.putExtra("first_time", false);
                            intentC.putExtra("month", month);
                            intentC.putExtra("year", year);
                        }
                        context.startActivity(intentC);
                    }
                }

            });
}

单击按钮查看下一个月或上个月时的onClick()方法:

CalendarActivity.java

@Override
public void onClick(View v) {
    if (v == prevMonth) {
        if (month <= 1) {
            month = 12;
            year--;
        } else {
            month--;
        }
        AsyncHttpClientManager.getCalendar(year, month, this,
                getApplicationContext(), prgDialog);
        setGridCellAdapterToDate(month, year);
    }
    if (v == nextMonth) {
        if (month > 11) {
            month = 1;
            year++;
        } else {
            month++;
        }
        prgDialog.show();
        AsyncHttpClientManager.getCalendar(year, month, this,
                getApplicationContext(), prgDialog);
        setGridCellAdapterToDate(month, year);
    }

}

我还尝试在发出请求之前完成CalendarActivity,但请求需要一些时间,以便当前的CalendarActivity完成,让我回到之前的活动,几秒钟后,CalendarActivity的新实例就会启动。

希望任何人都可以帮助我。提前致谢。

0 个答案:

没有答案