• 20210209日报


    Fragment获取Activity中的数据

    首先呢,我们可以通过Intent,直接携带参数传递,简单、方便。然而这种方法破坏了fragment的封装性,MainFragment不再是独立的构建单元,因为它现在由某个特定的activity托管,该activity的Intent定义了EXTRA_CRIME_ID的Extra无法在适用于其他任何activity 
    Activity

    public static Intent newIntent(Context context, UUID crime_id){
    Intent intent = new Intent(context,MainActivity.class);
    intent.putExtra(EXTRA_CRIME_ID,crime_id);

    return intent;
    }
    Fragment

    UUID crimeId = (UUID) getActivity().getIntent().getSerializableExtra(MainActivity.EXTRA_CRIME_ID)
    crime = CrimeLab.get(getActivity()).getCrime(crimeId);
    第二种方法,附加argument给fragment,调用Fragmen.setArguments(Bundle)方法,而且必须在ftagment创建后,添加activity(托管fragment的activity)前完成。

    也就是说,再创建MainFragment实例时,直接把传递的数据传递过去,直接在MainFragment里面调用获取数据,所有的业务逻辑都在MainFragment里面实现,实现了模块的独立性。

    public static MainFragment newInstance(UUID crime_id) {
    Bundle bundle = new Bundle();
    bundle.putSerializable(ARG_CRIME_ID, crime_id);

    MainFragment fragment = new MainFragment();
    fragment.setArguments(bundle);
    return fragment;
    }
    获取argument 
    先调用Fragment的getArguments()方法,再调用Bundle的限定类型getXxx()方法

    UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID);
    crime = CrimeLab.get(getActivity()).getCrime(crimeId);
    其实为了更好的实现模块的独立性,都是在获取数据的Activity或Fragment中创建静态方法实现具体的业务逻辑,而设置数据的Activity或Fragment负责调用静态方法,把需要传递的数据放入参数中即可。

  • 相关阅读:
    2017 年终总结 —— 在路上
    尝试造了个工具类库,名为 Diana
    走近 Python (类比 JS)
    Node.js 异步异闻录
    使用 Node.js 搭建一个 API 网关
    不就是语法和长难句吗—笔记总结Day4
    不就是语法和长难句吗—笔记总结Day3
    不就是语法和长难句吗—笔记总结Day2
    不就是语法和长难句吗—笔记总结Day1
    Kali Day1
  • 原文地址:https://www.cnblogs.com/Clark-Shao/p/14881916.html
Copyright © 2020-2023  润新知