经常遇到这样的功能,想调用一次方法时希望返回多个对象。
可是return语句却只允许返回一个对象,因此,解决办法只有创建一个对象,用它来持有想要返回的多个对象。
如,可以创建一个DataHolder类:
class DataHolder {
TextView tv;
SlidingDrawer mDrawer;
}
这个类持有一个TextView和一个SlidingDrawer对象,把它放到另一个类里面,它就可以作为一种数据类型为DataHolder的对象存在。当得到这个对象后,就可以直接得到它里面的两个数据。比如,在销毁一个Activity类之前,想要保存TextView和SlidingDrawer类型的两个数据。在重启这个Activity后,再去获取这两个类型的数据,怎么办?可以在销毁前把数据以DataHolder类型保存起来,重启Activity时再用专门的方法去得到这个DataHolder对象,然后就可直接获取之前保存的tv和mDrawer对象了。
销毁Activity之前,调用:(其中t2、mDrawer是销毁Activity前的实例对象)
public Object onRetainNonConfigurationInstance() {
DataHolder dh = new DataHolder();
dh.tv=t2;
dh.mDrawer=mDrawer;
return dh;
}重启Activity后,调用:
DataHolder dh=(DataHolder)getLastNonConfigurationInstance();
一般来说,创建Holder持有者类,可以在里面放入很多的类成员变量,在这个类的外部类里面,要多次访问到这些类型的数据时,持有者类就大有作为了,因为可以通过它的实例去直接得到那些类型的对象,像这样:DataHolder holder=new DataHolder(); 访问TextView对象用holder.tv,访问SlidingDrawer对象用holder.mDrawer。
这个持有者对象还可以继承其他的类或接口,如class DataHolder implements OnClickListener{ public void onClick(View v){...}},这样的话,如果有一个holder对象,一个按钮可以直接设置监听事件了 button.setOnClickListener(holder);
本文介绍如何在Android中利用DataHolder类来保存和恢复多个对象,包括TextView和SlidingDrawer类型的数据。通过创建DataHolder类并将其作为数据类型保存在Activity的非配置实例中,实现数据的持久化。重启Activity后,可以通过专门的方法获取DataHolder对象,进而直接获取之前保存的数据。
226

被折叠的 条评论
为什么被折叠?



