Android动态布局和状态保存/恢复

时间:2014-03-11 23:12:18

标签: java android android-layout

在我写的新活动中,我想动态布局并填充部分布局。

到目前为止我所拥有的是一个带有空布局元素的主要布局(比如说LinearLayout)。我有一个动态内容元素的布局文件(比如一个包含Spinner的LinearLayout和两个带有自己id的按钮)。

我可以很好地充气动态内容元素,并将它们添加到LinearLayout中。通过在膨胀的LinearLayout上调用findViewbyId,我可以获得对任何事件所需的UI元素的引用等(例如setOnClickListener)。

ViewGroup group = (ViewGroup)findViewById(R.id.my_dynamic_content_layout_id);
//Might actually inflate a number of different things, but for simplicity...
ViewGroup newContent = (ViewGroup)View.inflate(this, R.layout.dynamic_content_element, null);
group.addView(newContent);

((Button)newContent.findViewById(R.id.my_button)).setButtonListener(...);

然而,问题在于重新创建活动时(例如,方向更改)使我的动态内容保持不变。我在onSaveInstanceState中添加了一些数据,以便我可以重新填充我需要的视图,但似乎是因为动态内容中的重复id,Android会弄乱各个UI小部件的状态(在onCreate完成后的某个时刻),设置当调用onSaveInstanceState时,具有给定id的每个元素的状态是ui树中最后一个出现的元素的状态...

我想我需要在onSaveInstanceState / onCreate上做更多工作来保存/恢复我自己需要的一切。然而,在我弄清楚如何将单个小部件保存/恢复到Bundle之前,可能会遇到更多难题,并保留哪个元素具有输入焦点等...

有没有更好的方法来做这个,比如布局上的一些方法来保存/加载其树结构(例如,来自ViewGroup的get Bundle []按顺序包含每个子元素的元素)与默认实现非常相似(例如几乎完全自动化),但是正确处理重复的id /布局?

0 个答案:

没有答案