【发布时间】:2014-12-09 23:54:34
【问题描述】:
在我的代码中,我的线性布局中有几个视图。视图以编程方式添加
mUserProfile = mNavigationCallback.getUserProfile();
List<Contact> contacts = mUserProfile.getContacts();
for (Contact c : contacts) {
View view = View.inflate(getActivity(), R.layout.item_contact, null);
TextView tv = (TextView) view.findViewById(R.id.tvPhone);
tv.setText(c.getValue());
CheckBox cb = (CheckBox) view.findViewById(R.id.cbContactChecked);
cb.setId(generateViewId());
if (c.getType().equals("email")) {
llEmailContacts.addView(view);
}
if (c.getType().equals("phone")) {
llPhoneContacts.addView(view);
}
}
每个视图都包含带有 Textview 和 Checkbox 的线性布局。 但是checkbox在屏幕旋转时没有保存自己的状态,请问是什么问题以及如何解决?
UPD:我不能使用 onSaveInstanceState,因为这个片段使用了 setRetainInstance(true)
【问题讨论】:
-
您是否知道旋转 Android 时的默认行为会导致所有数据被重置?您需要在 onSaveInstanceState() 中处理状态保存并在 onCreate() 或 onRestoreInstanceState() 中检索它
-
还请彻底检查一个活动生命周期。每当您的设备方向发生变化时,都会再次调用 onCreate() !这意味着您的 UI 将失去其状态。请考虑使用片段
-
您希望保存什么状态?您如何在新活动/片段中使用与旧活动/片段中相同的小部件 ID 创建小部件?
-
@CommonsWare 我只想保存检查状态。它适用于 xml 定义的复选框,但不适用于动态添加。而且我不能使用 saveInstanceState,因为片段使用 setRetain(true)。 Id 是使用 View 类中的 generateViewId() 方法生成的。