如何通过设备的方向更改将活动保持在哪里?如果我在编辑文本视图中单击,键盘会出现,但如果我在此之后将手机转向侧面,键盘就会消失。
我调试了代码,每次更改手机的方向时都会调用onCreate。
非常感谢
答案 0 :(得分:2)
这是因为Android告诉您硬件/资源/配置已经改变,有许多应用程序可以切换它的布局或调整到新的硬件配置,这些应用程序可以更好地了解用户视图。
每次转动设备时都会调用onCreate方法,因为您可能希望使用响应新配置(屏幕分辨率,即)的布局来构建活动。 Android需要获得新的屏幕分辨率(即)以传递给您的活动并重新构建它们。
没有太多麻烦,因为活动会重新创建,问题是如果你做任何昂贵的操作,那么当轮换发生时,昂贵的方法将一次又一次地运行。
要避免这种情况的更有效的代码是将昂贵的操作结果保存到一个bundle中,当旋转ocurrs然后获得持久化结果时。像这样:
//data is the activity's necessary information to build activity data:
MyData data = new MyData();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
data = (MyData) getLastNonConfigurationInstance();
if( data == null ){
data = new MyData();
data = performExpensiveOperation;
}
buildLayout();
}
现在,buildLayout()将使用数据信息构建布局活动。
将此方法(“onRetainNonConfigurationInstance”)放入您的活动中,您可以保存与活动有关的整个数据...像这样的事情;
@Override
public Object onRetainNonConfigurationInstance() {
return data;
}
稍后您可以在此处阅读更具体的信息:Faster Screen Orientation
欢呼声
答案 1 :(得分:0)
您有两种选择。
1)使用活动清单条目中的“android:orientation = landscape / portrait”属性将活动锁定到一个方向。
2)通过将应用程序的状态保存在onSaveInstanceState(Bundle)中并在Bundle在重新加载时将其传递到onCreate(Bundle)时恢复配置,从而正确处理配置更改。
有许多资源和文章可以详细说明在Android上保存活动状态。