[android 创建Fragment示例传递参数时的注意事项]
来源:互联网 发布:博拉网络股份有限公司 编辑:程序博客网 时间:2024/06/05 16:25
最近做项目时,app打包时,报了一个这样的错误:
Error:Error: This fragment should provide a default constructor (a public constructor with no arguments) (com.xxxx.xxx.activity.test.HisDetailFragment) [ValidFragment]
大概意思就是:这个Fragment应该提供一个默认的构造函数。
我的项目大概是这样的,在创建fragment实例时,做了类似于这样的参数传递:
public MyDocDetailFragment(String doctor_id) { this.doctor_id = doctor_id; }
一查看,确实缺少一个空的构造函数。那缺少我就添加上呗。结果添加上后,再次打包(debug运行不报错),还是打包失败,结果又提示了一个如下的错误:
Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead
大概意思是:使用默认构造函数外加setArguments(Bundle)来代替,去Android的官网上查看Fragment的例子都是下面这个样子的
/** * Create a new instance of MyFragment that will be initialized * with the given arguments. */ static MyFragment newInstance(CharSequence label) { MyFragment f = new MyFragment(); Bundle b = new Bundle(); b.putCharSequence("label", label); f.setArguments(b); return f;
那么我就按照这样去传递参数,试试。而不是像之前
public MyDocDetailFragment(String doctor_id) { this.doctor_id = doctor_id; }
那样,去传递参数。
首先把之前的替换成这样的方式:
public static MyDocDetailFragment newInstance(String doctor_id) { MyDocDetailFragment fragment = new MyDocDetailFragment(); Bundle bundle = new Bundle(); bundle.putString("doctor_id", doctor_id); fragment.setArguments(bundle); return fragment; }
我们把参数set到了Arguments中,然后在fragment的 onCreateView 方法中,取出该参数就可以啦,如下:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Bundle args = getArguments(); if (args != null) { info_id = args.getString("doctor_id"); } view =inflater.inflate(R.layout.fragment_inf_detail, null); return view; }
最后在,创建该fragment实例的Activity中,直接调用newInstance()这个静态方法就可以啦。如下:
MyDocDetailFragment fragment=MyDocDetailFragment.newInstance(doctor_id);
这样同样也完成了,参数的传递。此时,我再次打包我的apk,就成功了!
但是有时我们传递的一些数据,Bundle不好储存,怎么办呢?我尝试这样去处理也是可以的。如下:
public static MyDocDetailFragment newInstance(JSONArray data, String doctor_id1) { MyDocDetailFragment fragment = new MyDocDetailFragment(); mData= data; doctor_id = doctor_id1; return fragment; }
声明 静态的 mData变量和doctor_id变量,直接将传递过来的数值将其赋值就行啦。
如果你觉得对你有用,就给个赞吧!
阅读全文
0 0
- [android 创建Fragment示例传递参数时的注意事项]
- Fragment的创建以及与activity的参数传递
- fragment之间的参数传递
- Fragment之间参数的传递
- Fragment间参数的传递
- Android开发之Fragment传递参数的几种方法
- Android中Fragment之间的通信和参数传递
- android两个fragment的使用localBroadcastManager来传递参数
- Android开发之Fragment传递参数的几种方法
- Android支持库中Fragment的使用及参数传递
- Android中Fragment数据参数传递
- Android Fragment生命周期和参数传递
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- Android Fragment中载入Fragment时注意事项
- Android Fragment传递参数Fragment.setArguments(Bundle bundle)
- Android Fragment传递参数Fragment.setArguments(Bundle bundle)
- 第五周(2) 后台代码解耦与客户端具体功能设计
- linux开启对外端口
- Android 布局属性大全(未整理)
- 数组旋转
- Java多线程简单实例
- [android 创建Fragment示例传递参数时的注意事项]
- WEB项目中MVC与MVVM的思考
- Tensorflow: Math基础
- MySQL的数据库引擎的类型
- 网络加载完毕后显示activity
- React Native 布局学习(一)
- PHY芯片 AR8033驱动代码分析
- 前端中的各种小知识点
- 除了青春 我们一无所有