在Eclipse中,写一个Fragment,重写其构造函数为有参构造函数,这似乎没什么问题,的确也没问题,我一直在Eclipse里面开发都没问题,这两天将项目移植到AndroidStudio中,跑起来没问题,一旦打包就出问题了,问题如下:
</pre><p>Error:Error: Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead [ValidFragment],没有构造函数啊,这是为什么呢,开始想不通,后来查找半天终于发现了问题所在:</p><p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;">因为Fragment源码中用到反射构造了对象,是无参数的构造函数。可以在ShowSynopsis上面加上@SuppressLint("ValidFragment"),忽略警告。</p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;">或者加入这句代码@SuppressLint(“ValidFragment")</p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;">当然,以后在做这个类似时候最好的方法就是不要去重写起构造函数,直接写一个</p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; color: rgb(85, 85, 85); font-family: 'microsoft yahei'; font-size: 15px; line-height: 35px;"><pre name="code" class="java">public static final YoFragment newInstance(String a)
{
<pre name="code" class="java" style="color: rgb(85, 85, 85); font-size: 15px; line-height: 35px;">YourFragment <span style="font-family: 'microsoft yahei';">f = new </span><span style="font-family: 'microsoft yahei';">YourFragment </span><span style="font-family: 'microsoft yahei';">();</span>
Bundle bdl = new Bundle(); bdl.putString("key", a); f.setArguments(bdl); return f;}
利用这样的方式来传递参数,就可以不用去重写带参的构造了