我已经在我的清单中为我的应用中的所有活动提供了所有权限,但我的活动在旋转手机时重新启动。重新启动解除我的警报框,再次调用Web服务器获取数据和活动确实保持以前的状态。我尝试了所有的可能性,但无法得到解决方案。我该如何解决这个问题?
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.station_list_layout);
ConstantValues.CURRENT_ACTIVITY=StationListActivity.this;
ConstantValues.NEAREST_PLACE_MENU_SLIDER_FLAG=false;
ConstantValues.MESSAGE_MENU_SLIDER_FLAG=false;
ConstantValues.STATION_LIST_MENU_SLIDER_FLAG=true;
orientation=getResources().getConfiguration().orientation;
userAndMessageCount=new UserAndMessageCount();
((TextView)findViewById(R.id.stationlist_route_name)).setText(ConstantValues.ROUTE_NAME);
list = (ListView) findViewById(R.id.myListView);
Cursor cursor=new UpdateLocalDatabase().getStationNameByRoute();
adapter=new StationListAdapter(StationListActivity.this, cursor);
adapter.notifyDataSetChanged();
if(!ConstantValues.STATION_LIST_LOATED)
userAndMessageCount.execute();
else
{
Footer.setMsgCount(ConstantValues.MSG_COUNT);
Footer.setUserCount(ConstantValues.FAVORITE_STATION_LIST.size());
list.setAdapter(adapter);
}
}
<activity
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="unspecified"
android:name=".LaunchingPageActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>`
答案 0 :(得分:4)
android:configChanges="keyboardHidden|orientation|screenSize"
将其添加到清单
中的activity元素像
<activity
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="unspecified"
android:name=".LaunchingPageActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>`
答案 1 :(得分:1)
您可以尝试使用onSaveInstanceState()和onRestoreInstanceState()方法保存和恢复Activity的状态。
请参阅here以了解更多信息。
请参阅问题here。
修改强> 例如: 如果您使用的是webview,可以执行以下操作:
@Override
protected void onSaveInstanceState(Bundle outState )
{
super.onSaveInstanceState(outState);
web.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onSaveInstanceState(savedInstanceState);
web.restoreState(savedInstanceState);
}
我建议阅读:Android - Preventing WebView reload on Rotate
另请阅读:How to prevent WebView auto refresh when screen rotation
答案 2 :(得分:0)
这是正常行为。从android文档处理运行时更改:
“某些设备配置可能会在运行时更改(例如屏幕方向,键盘可用性和语言)。当发生此类更改时,Android会重新启动正在运行的Activity(调用onDestroy(),然后调用onCreate())。重新启动行为旨在通过使用与新设备配置匹配的备用资源自动重新加载应用程序,帮助您的应用程序适应新配置。“
请参阅here
答案 3 :(得分:0)
这不是问题,因为视图需要重新绘制活动,重新启动以根据新方向绘制..这是根据Android文档.. 无论如何,您可以在清单中注册方向更改onconfigChanges并自行处理..
答案 4 :(得分:0)
添加
android:configChanges="orientation|keyboardHidden"
到相应的活动,这将解决您的问题。
希望它有所帮助。