我正在设法将对象传递给
Fragment或
DialogFragment的正确方式,而不会违反“
empty constructor”规则.
例如,我创建了一个自定义视图,对于每个我实例化,我想关联一个DiaglogFragment.此DialogFragment将用于显示控件,用户可以通过该控件更改其相关联的自定义视图的某些方面.因为视图是一个对象我明白我不能使用setArguments().
我可以实现我的DialogFragment(即Factory Pattern)的NewInstance(View)方法,但是如果我的Fragment被系统保存,然后在以后恢复,会发生什么情况?据我所知,没有参考的View对象?
有人告诉我,如果我以错误的方式使用片段,或者有办法实现将对象传递给片段,这也将在以后的时间内对系统进行重构.
解决方法
在DialogFragmnet类中,您将创建两个方法:
> newInstance来制作DialogFragment的实例
> setter来初始化你的对象
并添加setRetainInstance(true);在onCreate
public class YourDialogFragment extends DialogFragment { ComplexVariable yourVar; public static YourDialogFragment newInstance(int arg,ComplexVariable var) { YourDialogFragmentfrag = new MoveSongDialogFragment(); Bundle args = new Bundle(); args.putInt("count",arg); frag.setArguments(args); frag.setComplexVariable(var); return frag; } public void setComplexVariable(ComplexVariable var) { yourVar = var; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } }
然后,显示对话框
FragmentManager manager = getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); Fragment prev = manager.findFragmentByTag("yourTag"); if (prev != null) { ft.remove(prev); } // Create and show the dialog. DialogFragment newFragment = YourFragmentDialog.newInstance(argument,yourComplexObject); newFragment.show(ft,"yourTag");