在我的活动中,我可以在整个屏幕上拖动点。一旦我按下“返回”按钮,然后再次返回活动,点位置就不会保存。我该怎么办?
private ImageView map;
private ImageView dot;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_layout);
map = (ImageView) findViewById(R.id.map);
dot = (ImageView) findViewById(R.id.dot);
MotionReceiver tc = new MotionReceiver();
LocalBroadcastManager.getInstance(this).registerReceiver(tc, new IntentFilter(Constants.TEXT_MOVEMENT));
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putFloat("X", dot.getX());
savedInstanceState.putFloat("Y", dot.getY());
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
dot.setX(savedInstanceState.getFloat("X"));
dot.setY(savedInstanceState.getFloat("Y"));
}
答案 0 :(得分:0)
这是恢复状态的方法:
private ImageView map;
private ImageView dot;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_layout);
map = (ImageView) findViewById(R.id.map);
dot = (ImageView) findViewById(R.id.dot);
MotionReceiver tc = new MotionReceiver();
LocalBroadcastManager.getInstance(this).registerReceiver(tc, new
IntentFilter(Constants.TEXT_MOVEMENT));
if(savedInstanceState != null){
dot.setX(savedInstanceState.getFloat("X"));
dot.setY(savedInstanceState.getFloat("Y"));
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putFloat("X", dot.getX());
savedInstanceState.putFloat("Y", dot.getY());
}
答案 1 :(得分:0)
来自 documentation 。
当您的活动被销毁时,因为用户按下后退或 活动完成了自己,系统的活动概念 实例永远消失,因为行为表明了活动 不再需要了。但是,如果系统破坏了应付的活动 系统约束(而不是正常的应用程序行为),然而 实际的Activity实例消失了,系统会记住它 存在,如果用户导航回它,系统会创建 使用一组已保存数据的活动的新实例 描述活动被销毁时的状态。保存了 系统用于恢复先前状态的数据称为 实例状态,是一个存储在a中的键值对的集合 捆绑对象。
所以你的问题是对onSavedInstanceState()
方法的错误理解。如果系统销毁您的应用程序,而不是您,则会调用它。
要保存一些变量,您需要通过按后退按钮调用onDestroy()
方法后恢复,您必须使用 SharedPreferences 。
答案 2 :(得分:-1)
我不知道你正在使用什么框架,但这些行看起来很可疑:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putFloat("X", dot.getX());
savedInstanceState.putFloat("Y", dot.getY());
}
尝试:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putFloat("X", dot.getX());
savedInstanceState.putFloat("Y", dot.getY());
super.onSaveInstanceState(savedInstanceState);
}