android stdio 设置屏幕旋转后保存数据

本文介绍在Android应用开发中如何使用onSaveInstanceState()方法保存Activity的状态,避免屏幕旋转导致的数据丢失。文章强调了正确使用Bundle对象的重要性,并指出所保存的数据类型必须是基本数据类型或实现了Serializable接口的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此例为《android编程权威指南》中的第一个demo :GeoTest


1、onCreate()方法中最后判断需要保存的状态值


if(savedInstanceState != null){
    mCurrentIndex = savedInstanceState.getInt(KEY_INDEX,0);
}


2、在onCreate()方法后重写onSaveInstanceState(Budle)方法


@Override
public void onSaveInstanceState(Bundle savedInstanceState){
    super.onSaveInstanceState(savedInstanceState);
    Log.i(TAG,"onSaveInstanceState");
    savedInstanceState.putInt(KEY_INDEX,mCurrentIndex);

原理:所有activity的视图将自身的状态数据保存在Budle对象中,这样屏幕旋转就不会丢失反转前的数据。


需要注意的地方:

  • 我们在Bundle中存储和恢复的数据类型只能是基本数据类型(primitive type)以及可以实现Serializable接口的对象。
  • 创建自己的定制类时,如需onSaveInstanceState()方法中保存类对象,需要实现Serializable接口。
  •  activity对象只有在暂停或者停止的状态下才可能被销毁。此时会调用onSaveInstanceState()方法。


Android Studio 中实现地图旋转可以使用 Google Maps Android API。下面是一个简单的示例代码,可以实现地图以指定点为中心旋转一定角度的效果: 1. 首先,在 build.gradle 文件中添加 Google Maps Android API 的依赖: ```groovy dependencies { implementation 'com.google.android.gms:play-services-maps:17.0.0' } ``` 2. 在布局文件中添加地图控件: ```xml <fragment android:id="@+id/map_fragment" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 在 Activity 中获取地图控件,并设置地图的旋转中心和角度: ```java import android.os.Bundle; import android.support.v4.app.FragmentActivity; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.LatLng; public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; private LatLng mCenter = new LatLng(31.238068, 121.501654); // 旋转中心点 private float mAngle = 45f; // 旋转角度 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map_fragment); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // 设置旋转中心点和角度 CameraPosition position = new CameraPosition.Builder() .target(mCenter) .zoom(17f) // 设置缩放级别 .bearing(mAngle) // 设置旋转角度 .build(); mMap.animateCamera(CameraUpdateFactory.newCameraPosition(position)); } } ``` 在实际应用中,我们可以根据用户的操作来动态更新地图的旋转中心和角度,从而实现更加灵活的地图操作。同时,我们也可以使用其他地图库来实现地图旋转等操作,比如百度地图、高德地图等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fullstack_lth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值