zoukankan      html  css  js  c++  java
  • 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负责调用静态方法,把需要传递的数据放入参数中即可。

  • 相关阅读:
    kafka cdh 安装
    【转】Public key for *.rpm is not installed,使用yum安装时报错
    12.yaml的简单使用
    python基础教程第三版阅读笔记(一)
    Python库文件安装失败问题及解决方式汇总-持续更新ing~
    taiko初体验
    VMware之USB设备连接
    C++之DLL的动态加载与静态加载初尝试
    C++课堂练习二
    C++课堂练习三
  • 原文地址:https://www.cnblogs.com/Clark-Shao/p/14881916.html
Copyright © 2011-2022 走看看