首先,在Fragment中定义接口,并让Activity实现该接口,如下:
public interface OnFragmentInteractionListener {
void onItemClick(String str);
}
接下来,在Fragment的onAttach()中,将参数Context强转为OnFragmentInteractionListener对象传递过去
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
- Activity向Fragment传递数据
在创建Fragment的时候,可以通过setArguments(Bundle bundle)方式将值传递给Activity,如下:
public static Fragment newInstance(String str) {
FragmentTest fragment = new FragmentTest();
Bundle bundle = new Bundle();
bundle.putString(ARG_PARAM, str);
fragment.setArguments(bundle);//设置参数
return fragment;
}
6)Fragment && Fragment数据交互
Fragment和Fragment间数据交互,应该也是会经常用到的。可使用宿主Activity做传递媒介,原理其实也是通过使用onActivityResult回调,完成Fragment && Fragment的数据交互,这其中有两个比较重要的方法:Fragment.setTargetFragment、getTargetFragment()
在 FirstFragment 中,通过setTargetFragment来连接需要交互的Fragment:
secondFragment.setTargetFragment(FirstFragment.this, REQUEST_CODE);
接着实现onActivityResult,处理传递过来的数据:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode != Activity.RESULT_OK){
return;
}else{
Integer str = data.getIntExtra("key",-1);
//处理数据...
}
}
在 SecondFragment 中调用sendResult()方法,回传数据给 FirstFragment:
private void sendResult(int resultOk) {
if (getTargetFragment() == null) {
return
} else {
Intent intent = new Intent();
intent.putExtra("key", 520);
getTargetFragment().onActivityResult(FirstFragment.REQUEST_CODE, resultOk, intent)
}
}
1.3 Android Fragment 漏洞产生的原因
Android是基于Linux开放性内核的操作系统,是Google公司在2007年发布的手机操作系统
Google Android 4.3及之前版本的沙盒环境存在安全漏洞,该漏洞影响任何使用PreferenceActivity类的应用,包括Settings, Gmail, Google Now, Dropbox, Evernote。攻击者可利用此漏洞执行任意代码,从而绕过Android沙盒,执行未授权操作
Android 4.3及之前版本在应用中采用不安全的 PreferenceActivity 类实施方式的开发者。在这种情况下,这些类会让人利用 Fragment 实现注入攻击,这种实现方式让恶意的外部应用可以加载原本不公开的 Fragment。例如,通过导出的PreferenceActivity的子类,没有正确处理Intent的extra值。攻击者可绕过限制访问未授权的界面
从 2017 年 3 月 1 日起,Google Play 开始禁止发布存在以下情况的新应用或应用更新:其 PreferenceActivity 类可能有安全漏洞,让攻击者可以利用 Fragment 实现注入攻击。请参阅 Play 管理中心内的通知。在 Play 管理中心显示的截止日期过后,系统可能会将所有包含未修复安全漏洞的应用从 Google Play 中移除
产生的原因