我可以使用片段非默认构造函数和onSaveInstanceState方法

时间:2014-12-12 07:30:38

标签: java android android-fragments

我创建一个片段,需要在初始化过程中接收对象 现在我读到我需要担心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;
    }

0 个答案:

没有答案