2 o19830015 o19830015 于 2012.12.05 10:58 提问

人物肖像到风景转换的时候保存视图状态

用GridView 创建的日历应用,每次转换人物肖像到风景就不能保存当前状态,比如,把十一月从人物肖像视图转换到风景视图,回来就会变成了12月,我在OnCreate()中添加下面的代码:

 if(savedInstanceState != null && savedInstanceState.containsKey(CALENDAR)){
        mCalendar = (Calendar) savedInstanceState.getSerializable(CALENDAR);
   }else{
    mCalendar = Calendar.getInstance();
   }

又在类中添加方法:

@Override
    public void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);

        outState.putSerializable(CALENDAR, mCalendar);
    }

但是没用。

我的实现代码如下:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_calendar);

    mCalendar = Calendar.getInstance(Locale.getDefault());
    month = mCalendar.get(Calendar.MONTH) + 1;
    year = mCalendar.get(Calendar.YEAR);

    previous = (Button) findViewById(R.id.b_prevMonth);
    next = (Button) findViewById(R.id.b_nextMonth);
    displayMonth = (TextView) findViewById(R.id.et_displayMonth);
    gv_daysOfWeek = (GridView) findViewById(R.id.gv_daysOfWeek);
    gv_calendar = (GridView) findViewById(R.id.gv_calendar);

    previous.setOnClickListener(this);
    next.setOnClickListener(this);
    displayMonth.setText(DateFormat.format(monthDisplay, mCalendar.getTime()));

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.weekdays_grid, R.id.grid_item_label, WEEK_DAYS);
    gv_daysOfWeek.setAdapter(adapter);

    setGridCellAdapter(month, year);

    if(savedInstanceState != null && savedInstanceState.containsKey(CALENDAR)){
        mCalendar = (Calendar) savedInstanceState.getSerializable(CALENDAR);
    }else{
        mCalendar = Calendar.getInstance();
    }
}

/**
 */
 private void setGridCellAdapter(int month, int year) {
     cellAdapter = new GridCellAdapter(getApplicationContext(),R.id.day_gridcell, month, year);
     mCalendar.set(year, month - 1 , mCalendar.get(Calendar.DAY_OF_MONTH));
     displayMonth.setText(DateFormat.format(monthDisplay, mCalendar.getTime()));
     cellAdapter.notifyDataSetChanged();
     gv_calendar.setAdapter(cellAdapter);
 }

1个回答

cytown
cytown   2012.12.05 11:11
已采纳

mCalendar.set(year, month - 1 , 1);

此外,建议直接实用month而不是calendar作为保存和恢复的对象,更简单。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
.net 错误:动态加载控件时出现错误:未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。
.net 错误:未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配。 at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)   at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)   at System.
未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。
在Asp.net 2.0 中,动态变化页面的控件时,会出现如下错误:能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配。 原因是在回发时,用户试图去加载另外一个控件的时候,由于第一控件的ViewState 仍然存在,服务端会尝试去恢复已经不存在的用户控件的
ASP.NET 状态管理(视图状态 ViewState)
无论 Web 程序框架多么先进,它都不能改变一个事实:HTTP是一种无状态协议。        每次 Web 请求后,客户端和服务器端断开,同时 ASP.NET 引擎释放页面对象。这种架构保证了Web应用程序能够同时响应数千个并发请求而不会导致服务器内存崩溃。但其负面效应是你必须通过其他技术存储 Web 请求之间的信息并在需要的时候获取它们。   视图状态       视图
验证视图状态 MAC 失败的解决办法
昨天用户反应系统中有问题,问题就在于翻页的时候,系统会报以下错误。但是我们的系统已经上线1年多了,从来没出现过错误,怎么会出现错误呢? 于是开始检测,查找原因。 1. 出错提示 “/”应用程序中的服务器错误。 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
风格转换简介
风格转换,是把一张图片转化成同内容但包含某风格的新图片。本文将介绍如何让机器学习风格转换,包含两种方法:优化问题求解、转化网络求解。
验证视图状态 MAC 失败解决方法
验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。  运行时提示错误: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和 验证算法。不能在群集中使用 AutoGenerat
如何在视图状态中保存自定义的对象
背景:B/S三层结构系统,在表现层实例化业务层的对象,并使用此对象执行业务规则,访问数据层。问题:在表现实例化一个业务对象,在操作此对象时发现它不能被加入到ViewState中,提示错误:类型“AmmeterChg”必须标记为 Serializable 或者具有 ReferenceConverter 以外的TypeConverter,才能被放置在视图状态中。解决方案:通过将类实现 IS
事件代码: 4009 事件消息: 视图状态验证失败。 原因: 提供的视图状态未通过完整性检查。
事件代码: 4009  事件消息: 视图状态验证失败。 原因: 提供的视图状态未通过完整性检查。  事件时间: 2011-6-22 16:38:28  事件时间(UTC): 2011-6-22 8:38:28  事件 ID: 63b96ca68f6f4cddb4f4bfb1530920dc  事件序列: 40  事件匹配项: 1  事件详细信息代码: 50203  解决方案:
解决视图状态消息验证代码 (MAC) 错误
什么是视图状态? 视图状态是指在 ASP.NET 应用程序的 WebForms (.aspx) 页面中往返的信息。__VIEWSTATE 字段的 HTML 标记如下所示: 例如,可以将按钮控件的文本存储在 __VIEWSTATE 字段中。如果用户单击该按钮,则 Button_Click 事件处理程序将能够从视图状态字段中提取该按钮的文本。有关 ASP.NET 视图状态的更详细概述,
验证视图状态 MAC 失败,不能在群集中使用 AutoGenerate
ASP.NET站点发布后,遇到如下错误: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.Htt