【发布时间】:2011-08-20 18:18:31
【问题描述】:
我正在尝试将我的视图状态保存在一个活动中,并使用 Bundle 将其传递给另一个活动。在第二个活动中,我尝试使用包恢复视图状态。
第一个活动
private View CreateView() {
ScrollView scrollView = new ScrollView(this);
final LinearLayout layout = new LinearLayout(this);
layout.setOrientation(android.widget.LinearLayout.VERTICAL);
scrollView.addView(layout);
Button btn = new Button(this);
btn.setId(100);
btn.setText("Button Text");
btn.setOnClickListener(new ClickListener());
layout.addView(btn);
return scrollView;
}
onCreate
super.onCreate(savedInstanceState);
View v = CreateView();
setContentView(v);
保存状态
SparseArray<Parcelable> array = new SparseArray<Parcelable>();
view.saveHierarchyState(array);
Bundle bundle = new Bundle();
bundle.putSparseParcelableArray("state", array);
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtras(bundle);
startActivity(intent);
创建第二个活动
bundle = this.getIntent().getExtras();
View view = new View(this);
view.restoreHierarchyState(bundle.getSparseParcelableArray("state"));
setContentView(view.getRootView());
Button btn = (Button)findViewById(100);
一切正常,无一例外。但是,我面临两个问题: 1. 第二个活动的视图是空白的。虽然我已经恢复了保存状态,但我什么都看不到 2. 第二个activity中按钮(id为100)的实例总是null
在调试时,我可以看到包中的一个值具有 id 100
对于我似乎做错的事情的任何帮助将不胜感激。谢谢
【问题讨论】:
-
这让我觉得想做一件奇怪的事。原因是什么?
-
@Dave - 同意这是一件奇怪的事情。遗憾的是,我无法在这里讨论其中的“为什么”部分!谢谢!
标签: android