码迷,mamicode.com
首页 > 其他好文 > 详细

DialogFragment学习笔记

时间:2016-06-14 23:43:22      阅读:656      评论:0      收藏:0      [点我收藏+]

标签:

  • 创建DialogFragment

  跟通常的创建Fragment差不多,XML,继承DialogFragment,复写onCreateView()

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_dialog_color, container , false);
        return view;
    }
  • 显示DialogFragment

  和其他fragment一样, DialogFragment 实例也是由托管activity的 FragmentManager 管理着的。要将 DialogFragment 添加FragmentManager 管理并放置到屏幕上,可调用fragment实例的以下方法:

  public void show(FragmentManager manager , String tag)

  public void show(FragmentTransaction trasaction , String tag)

string参数可唯一识别存放在 FragmentManager 队列中的 DialogFragment 。可按需选择究竟是使用 FragmentManager 还是FragmentTransaction 。如传入 FragmentManager 参数,则事务可自动创建并提交。这里我们选择传入 FragmentManager 参数。代码如下:

FragmentManager fm = getFragmentManager();
        ColorDialogFragment dialog = ColorDialogFragment.newInstance();
        dialog.setTargetFragment(this , REQUEST_COLOR);
        dialog.show(fm , DIALOG_COLOR);

这样便启动了这个DialogFragment。

  • Fragment之间的数据传递

  如何实现由同一个Activity托管的两个Fragment之间的数据传递呢?

  1>将主Fragment(这里暂且这么称呼)的数据传递给DialogFragment可以通过setArgument()来实现。如:

  技术分享

  然后通过newInstance()来获取对象传入参数即可。

  2>返回数据给主Fragment则需要用到setTargetFragment(Fragment fragment , int requestCode)

  该方法接受目标fragment以及一个类似于传入 startActivityForResult(...) 方法的请求代码作为参数。随后,目标fragment可使用该请求代码通知是哪一个fragment在返回数据信息。目标fragment以及请求代码由 FragmentManager 负责跟踪记录,我们可调用fragment(设置目标fragment的fragment)的 getTargetFragment() 和 getTargetRequestCode() 方法获取它们。

  1.设置Target Fragment

  技术分享

  2.传递数据给Target Fragment

   类似Activity传递数据,使用Fragment.onActivityResult(int, int, Intent) 方法传递数据。

  Activity.onActivityResult(...) 方法是 ActivityManager 在子activity销毁后调用的父activity方法。处理activity间的数据返回时,无需亲自动手, ActivityManager 会自动调用 Activity.onActivityResult(...) 方法。父activity接收到 Activity.onActivityResult(...) 方法的调用后,其FragmentManager 会调用对应fragment的 Fragment.onActivityResult(...) 方法。

  处理由同一activity托管的两个fragment间的数据返回时,可借用 Fragment.onActivityResult(...) 方法。因此,直接调用目标fragment的 Fragment.onActivityResult(...) 方法,即可实现数据的回传。可在DialogFragment中新建一个方法如:

  技术分享

  然后调用该方法即可,如:setResult(Activity.RESULT_OK);

  再复写主Fragment中的onActivityResult()即可得到传回的数据,如:

  技术分享

 

参考:《Android编程权威指南》

DialogFragment学习笔记

标签:

原文地址:http://www.cnblogs.com/i-love-kobe/p/5585638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!