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

  • 相关阅读:
    JDBC 处理sql查询多个不确定参数
    网页跳转方法总结
    图片上传,直接在网页中显示(支持IE,谷歌,火狐浏览器)
    Oracle报 ORA-00054资源正忙的解决办法
    js对cookie的操作:读、写、删
    认识SignalR
    sql 查询结果用逗号分隔到一列里
    异步编程之await的使用
    应用程序池
    判断list重复扩展方法
  • 原文地址:https://www.cnblogs.com/Clark-Shao/p/14881916.html
Copyright © 2011-2022 走看看