我创建一个片段,需要在初始化过程中接收对象 现在我读到我需要担心configuartion的变化,因此使用Bundle。
我想知道的是两件事:
1)我可以使用nonDefault构造函数(不使用bundle)设置片段并仅在onSaveInstance中处理bundle部分,或者是否存在不能解决的情况? (我有一个默认的空构造函数,供android框架在需要时使用)
2)我在我的Application实例的扩展中使用一个数组作为管道来保存对象,所以我不必实现parcelable接口(有很多对象需要保存并在更改后保留),是有什么方法可以出错这种方法,如果有更好的方法(没有实现可序列化或可分割?)
public FragmentAddContactGroups (ContactGroup group)
{
if (group!=null)//editin a group
{
set_editExisting(true);
set_groupContactList(group.get_contactsInGroup());
}
else //a new group
{
set_editExisting(false);
ContactGroup newGroup=new ContactGroup();
ArrayList<Contact> array=new ArrayList<>();
newGroup.set_contactsInGroup(array);
set_groupContactList(array);
}
}
saveinstance方法:
public void onSaveInstanceState(Bundle outState)
{
//save the chosen group
int id=getApplication().set_pipeItem(get_group());
outState.putInt(GROUP_KEY,id);//add the pipe id for the item to the bundle
super.onSaveInstanceState(outState);
}
onCreateView:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
//in case the view is restarted and we edit an existing group get the group from pipe
if (savedInstanceState!=null)
{
int itemId=savedInstanceState.getInt(GROUP_KEY);//get the pipe item key
set_group((ContactGroup)getApplication().get_pipeItem(itemId));
set_groupContactList(get_group().get_contactsInGroup());
}
View rootView = inflater.inflate(R.layout.f_add_contact_group, container,
false);
setPlaceHolders(rootView);
assignListeners();
initView();//create the people list and add it to the view
return rootView;
}