3

我对有关默认构造函数的错误消息有点困惑。

我有 2 节课MainActivityResultDialog. 中的一些方法MainActivity创建一个新对话框并将 2strings 传递给ResultDialog.

ResultDialog延伸DialogFragment。因此,我定义了自己的构造函数,但是当出现该错误时,我只是创建了一个无参数构造函数,但仍然不允许这样做。

我已经在 SO 上进行了搜索,但答案有点解释说屏幕旋转可能会破坏并使用默认构造函数重新创建屏幕,但仍然没有回答我如何解决这个问题。

错误是避免片段中的非默认构造函数:使用默认构造函数加上 Fragment#setArguments(Bundle) 代替

有人请帮我解决这个问题,我有点困惑。我的部分ResultDialog课程:

  public class ResultDialog extends DialogFragment {

private String message;//to hold the message to be displayed
private String title;//for alert dialog title

//constructor for the dialog passing along message to be displayed in the alert dialog
public ResultDialog(String message,String title){
    this.message = message;
    this.title = title;

}

public ResultDialog(){
    //default constructor
}
4

3 回答 3

5

您可以使用newInstance. 检查文档

http://developer.android.com/reference/android/app/Fragment.html

还要检查这个

为什么我要避免片段中的非默认构造函数?

 ResultDialog rd = ResultDialog.newInstance("message","title");

然后

  public static ResultDialog newInstance(String message,String title) {
    ResultDialog f = new ResultDialog();
    Bundle args = new Bundle();
    args.putString("message", message);
    args.putString("title", title);
    f.setArguments(args);
    return f;
}

并用于getArguments()检索值。

String message = getArguments().getString("message");
String title = getArguments().getString("title");

getArguments()

public final Bundle getArguments ()

Added in API level 11
Return the arguments supplied when the fragment was instantiated, if any.
于 2013-10-05T10:43:28.163 回答
1

同样适用于对话框。Link 你不能声明你自己的构造函数。只需生成对话框的新实例并按参数传递字符串。在您的 onCreate 中,只需使用 getArguments().getString("key")

希望这可以帮助你

于 2013-10-05T10:34:39.050 回答
1

建议您仅使用无参数构造函数并使用该setArguments(Bundle)方法将数据传递到Fragment. 根据文档

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

使用setArguments(Bundle)后,您可以getArguments()从 内部调用Fragment以检索数据。

于 2013-10-05T10:35:36.987 回答