首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从扩展DialogFragment的类创建默认构造函数,而且我已经创建了自己的自定义构造函数。

无法从扩展DialogFragment的类创建默认构造函数,而且我已经创建了自己的自定义构造函数。
EN

Stack Overflow用户
提问于 2013-10-05 10:26:55
回答 3查看 5.1K关注 0票数 4

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

我有两个类MainActivityResultDialogMainActivity中的一些方法创建一个新的对话框,并将2字符串传递给ResultDialog中的自定义构造函数。

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

我已经搜索过abit了,但是答案可以解释一下,屏幕旋转可能会破坏和重新创建屏幕,使用默认的构造函数,但仍然没有回答我如何解决这个问题。

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

谁来帮帮我,我有点糊涂了。我的ResultDialog课程的一部分:

代码语言:javascript
运行
复制
  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
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-05 10:43:28

您可以使用newInstance。查一下文件

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

也要检查这个

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

代码语言:javascript
运行
复制
 ResultDialog rd = ResultDialog.newInstance("message","title");

然后

代码语言:javascript
运行
复制
  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()检索值。

代码语言:javascript
运行
复制
String message = getArguments().getString("message");
String title = getArguments().getString("title");

getArguments()

代码语言:javascript
运行
复制
public final Bundle getArguments ()

Added in API level 11
Return the arguments supplied when the fragment was instantiated, if any.
票数 6
EN

Stack Overflow用户

发布于 2013-10-05 10:34:39

同样的作品用于对话。链接您不能声明自己的构造函数。只需生成对话框的新实例并按参数传递字符串即可。在您的onCreate中,只需使用getArguments().getString("key")获取它们

希望这对你有帮助

票数 1
EN

Stack Overflow用户

发布于 2013-10-05 10:35:36

建议您不要定义单独的构造函数,而是只使用无参数的构造函数,并使用setArguments(Bundle)方法将数据传递到Fragment。根据文档

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

一旦使用了setArguments(Bundle),就可以从Fragment内部调用getArguments()来检索数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19196704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档