最近做项目需要做一个文件管理器的cordova插件,用到了activity与fragment,那fragment怎么传递数据给activity呢?就是用接口实现。
1.定义接口(回调接口)
public interface FragmentACallBack {//定义接口
void setData(JSONObject data);
}
2.在fragment onAttach方法里注册接口
@Override
public void onAttach(Context context) {
super.onAttach(context);
fragmentACallBack = (FragmentACallBack) getActivity();//注册接口
}
3.接口传递数据 在需要传递数据的地方调用
listAdapter.setOnClickMy(new FolderDataAdapter.OnMyClick() {
@Override
public void monMyClick(int id) {
LogUtil.w("获取到的值="+id);
FileInfo finfo = data.get(id);
File file = new File(finfo.getFilePath());
if(file.exists()){
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("fileName",finfo.getFileName());
jsonObject.put("fullPath",finfo.getFilePath());
jsonObject.put("fileSize", FileUtil.getFileSize(file));
fragmentACallBack.setData(jsonObject);//接口传递数据
} catch (JSONException e) {
e.printStackTrace();
fragmentACallBack.setData(null);
}
}else{
fragmentACallBack.setData(null);
LogUtil.w("不存在");
}
}
});
4.activity实现接口,首先activity接入接口
implements FragmentACallBack会生成对应方法
然后在对应方法里接收回调的数据
@Override
public void setData(JSONObject data) {//实现接口
LogUtil.w("activity获取到的参数="+data);
try {
Intent intent=new Intent();
intent.putExtra("fileName",data.getString("fileName"));
intent.putExtra("fullPath",data.getString("fullPath"));
intent.putExtra("fileSize",data.getString("fileSize"));
setResult(RESULT_OK,intent);
} catch (JSONException e) {
e.printStackTrace();
}
//关闭该activity,把返回值传回到cordovaPlugin插件
this.finish();
}
完结