Android Studio错误:此类应提供默认构造函数

时间:2014-12-09 09:25:19

标签: android android-fragments

当我在Android Studio 1.0中尝试生成签名APK向导时,我遇到了错误。

Error: This class should provide a default constructor (a public constructor with no arguments) (com.ex.Tab1_2_1) [Instantiatable]

有我的代码。

它适用于Eclipse,我想知道为什么它在Android Studio中不起作用。

public class Tab1_2_1 extends Fragment{

Context mContext;
WebView mWebView;
View mView;

public Tab1_2_1(Context context)
{
    mContext = context;
}

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

@Override
public View onCreateView(LayoutInflater inflater, 
        ViewGroup container, Bundle savedInstanceState) 
{
    mView = inflater.inflate(R.layout.webview, null);

    return mView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) 
{
   super.onActivityCreated(savedInstanceState);

   mWebView = (WebView)mView.findViewById(R.id.webview);
   mWebView.loadUrl("file:///android_asset/tab1_2/tab1_2_1.html"); 
   mWebView.getSettings().setJavaScriptEnabled(true);
}
}

度过愉快的一天。

2 个答案:

答案 0 :(得分:1)

来自官方文件Fragment

  

Fragment的所有子类都必须包含公共无参数构造函数。框架通常会在需要时重新实例化一个片段类,特别是在状态恢复期间,并且需要能够找到此构造函数来实例化它。如果无参数构造函数不可用,则在状态恢复期间的某些情况下将发生运行时异常。

您无需将上下文传递给它。您始终可以使用getActivity()方法

获取上下文

答案 1 :(得分:0)

是的,Fragment的子类需要有一个空的构造函数。你应该删除

public Tab1_2_1(Context context)
{
    mContext = context;
}

另外,拥有一个只是提供上下文对象的构造函数根本没用,因为Fragment具有getActivity方法,该方法返回主机Fragment

的活动