android – 在实例化时将对象传递到片段或对话框片段

我正在设法将对象传递给 FragmentDialogFragment的正确方式,而不会违反“ 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");

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...