buder

20171126--fragment的小项目

1.在使用fragment时候,初始化的时候报了两个错误,解决方法如下文所示:https://www.2cto.com/kf/201706/650158.html

其实一共报了两个错误:

android studio报错:This fragment should provide a default constructor (a public constructor with no arguments),修改后又报新错误:Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead [ValidFragment]。下面就来具体说一下Fragment打包时报的这两个错误原因以及解决方案。

  (1)This fragment should provide a default constructor (a public constructor with no arguments)在打包时出现在这个问题,原因是一定要有一个无参的默认构造函数,如果不写任何构造函数,其实会默认初始化一个无参的构造函数,这时其实是不会报错的。但是一旦写了带参数的构造方法而没有重写无参的构造函数,这时就要打包编译时提示上边的警告了。
贴下我当时的一个错误或者不合理写法:

public class MyFragment extends BaseFragment{
 
    public MyFragment(Context context) {
        mContext = context;
    }
 
    public static MyFragment newInstance(Context context) {
        return new MyFragment (context);
    }
}

 

为了不让报这个错,还是按照官方建议写一个无参的构造函数,如下:

public class MyFragment extends BaseFragment{
 
    public MyFragment() {
    }
 
    public static MyFragment newInstance(Context context) {
        mContext = context;
        return new MyFragment ();
    }
}

 

其实也可以直接把无参的构造函数去掉,系统会默认创建的。

  (2)报错2:Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead [ValidFragment]

在打包时出现这个问题,在类上加一个注解@SuppressLint(“ValidFragment”)可以达到不报错的目的,但是为避免Fragment中的非默认构造函数,官方还是建议使用默认构造函数加上Fragment#setArguments(Bundle)代替[ValidFragment]。

所以需要修改为如下的形式:

public class MyFragment extends BaseFragment{
 
    public MyFragment() {
        mContext = getActivity();
    }
 
    public static MyFragment newInstance(String tag) {
        MyFragment myFragment = new MyFragment();
        Bundle bundle = new Bundle();
        bundle.putString("tag",tag);
        myFragment.setArguments(bundle);
        return myFragment;
    }
}

 

  按照上边的建议来修改Fragment的构造函数和静态工厂方法newInstance()来获取实例就可以避免在正式打包时报上边的两个错误了。应该尽量还是按照Google官方的建议解决方案来处理会比较好些。当然也可以视具体情况而定。

2.

 

3.

 

4.

 

5.

 

6.

 

7.

posted on 2017-11-26 21:47  buder  阅读(332)  评论(0编辑  收藏  举报

导航