zoukankan      html  css  js  c++  java
  • DialogFragment学习笔记

    • 创建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编程权威指南》

  • 相关阅读:
    Redis 设计与实现 2:Redis 对象 redisObject
    Redis 设计与实现 1:数据库 redisDb
    KafkaProducer 简析
    G1 收集器
    KafkaMirrorMaker 的不足以及一些改进
    Redis 数据结构与对象编码 (Object Encoding)
    跨境 TCP 传输优化实录 — 使用 BBR 解决 LFN 问题
    TCP 协议简析
    使用模拟退火算法优化 Hash 函数
    LSM-Tree 与 B-Tree
  • 原文地址:https://www.cnblogs.com/i-love-kobe/p/5585638.html
Copyright © 2011-2022 走看看