Java 为对话添加额外内容

Java 为对话添加额外内容,java,android,android-dialog,Java,Android,Android Dialog,我有一个在Android中显示对话框的通用类。我如何向这个扩展了android.app.Dialog的类传递额外的内容 例如,对于活动,我可以使用getIntent().getIntExtra() 我如何向这个扩展了android.app.Dialog的类传递额外的内容 首先我想说的是,您没有提供关于当前实现的更多细节,所以我提到的以下内容是,我假设您有一些返回对话框的方法(您提到您使用的是一个存储各种对话框的类) 那个么直接通过方法传递数据呢 public static final Dialo

我有一个在Android中显示对话框的通用类。我如何向这个扩展了android.app.Dialog的类传递额外的内容

例如,对于活动,我可以使用
getIntent().getIntExtra()

我如何向这个扩展了android.app.Dialog的类传递额外的内容

首先我想说的是,您没有提供关于当前实现的更多细节,所以我提到的以下内容是,我假设您有一些返回对话框的方法(您提到您使用的是一个存储各种对话框的类)

那个么直接通过方法传递数据呢

public static final Dialog getDialog(int id, String title) {
   // do your stuff
}
或者您可以使用构造函数来实现您的目标:

public Dialog(Context context, String title, int data) {
   super(context);
   this.title = title;
   this.data = data;
}
注意,您可以创建任何具有任意多个参数的构造函数。Dialog类只需要调用一个超级构造函数:

super(Context context);
super(Context context, int theme);
super(Context context, boolean cancelable, OnCancelListener listener);

因此,如果您正在调用其中一个,您就可以了。

请使用另一个构造函数,例如:

public class MyClass extends Dialog
{
    private Integer data;

    public MyClass(Context context){super(c);}
    public MyClass(Context context, Integer value)
    {
        super(c); 
        data = value;
    }
}

然后你可以使用课堂上其他地方的数据。

下面是我如何将额外内容传递给对话框的

  • 创建一个静态方法,该方法将创建对话框并在包中设置额外的值

    public static final String TAG = "ExampleDialog";
    
    private static final String BUNDLE_TITLE = "title"
    
    ...
    
    public static ExampleDialog newInstance(String title) {
        ExampleDialog dialog = new ExampleDialog();
        Bundle bundle = new Bundle();
        bundle.putString(BUNDLE_TITLE, title);
        dialog.setArguments(bundle);
        return dialog;
    }
    
  • onCreateDialog
    方法中,访问捆绑包中的字符串

    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Bundle bundle = this.getArguments();
        final String title = bundle.getString(BUNDLE_TITLE);
        ...
    }
    
  • 创建对话框

    ExampleDialog dialog = ExampleDialog.newInstance("Title of Dialog");
    dialog.show(getFragmentManager(), ExampleDialog.TAG);
    

  • 我不确定,但也许你可以通过构造函数传递?你想传递到对话数据,例如int吗?@Geralt是的。实际上,我需要将对话框标题作为字符串发送给它。但也许你可以重写构造函数,然后传递你需要的内容?例如,使用两个字段(上下文和YourDataObject)创建构造函数。调用super(context),然后将数据设置为构造函数中的字段