У меня есть некоторые проблемы с изменением ориентации Android Activity.
У меня есть игра и несколько летающих шаров.Воздушные шары (ImageViews
) создаются динамически, поэтому они летают.Но когда я меняю ориентацию устройства (на порт или землю), активность воссоздается, и мои воздушные шары исчезают.То же самое происходит, когда я перехожу к следующему занятию, а затем возвращаюсь к своему занятию воздушными шарами.
Есть ли способ "сохранить" мои динамически созданные воздушные шары (а также их положение и другие свойства) в моем задании
Я также пытался getLastNonConfigurationInstance() / onRetainNonConfigurationInstance()
, но мне кажется, что он работает с данными, а не с View
элементами (возможно, из-за того, что родитель этих просмотров является предыдущим действием)
public class Singleton {
private static final Singleton instance = new Singleton();
private Button btn;
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
public void createBtn(Context context, LinearLayout layout) {
if (btn == null) {
btn = new Button(context);
layout.addView(btn);
}
}
}
public class TestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Singleton s = Singleton.getInstance();
s.createBtn(this, ((LinearLayout) findViewById(R.id.baseLayout)));
}
}
Кнопка не будетпоявляются во втором onCreate (при изменении ориентации) (я думаю, проблема в том, что контекст кнопки является предыдущим действием)
Обновлен код:
public class Singleton {
private static final Singleton instance = new Singleton();
private Button btn;
private SparseArray<Parcelable> container;
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
public void createBtn(Context context, LinearLayout layout) {
if (btn == null) {
btn = new Button(context);
layout.addView(btn);
btn.setText("Hello");
saveBtn();
} else if (container != null){
btn = new Button(context);
btn.restoreHierarchyState(container);
layout.addView(btn);
}
}
public void saveBtn() {
container = new SparseArray<Parcelable>();
btn.saveHierarchyState(container);
}
}
Я думаю, что на новой кнопке должно появиться «Hello"текст, но этого не происходит.Что не так?