【问题标题】:Put extras for Dialog为对话框添加额外内容
【发布时间】:2017-10-31 00:17:23
【问题描述】:

我有一个在 Android 中显示对话框的通用类。我如何将额外的东西传递给这个类,扩展android.app.Dialog

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

【问题讨论】:

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

标签: java android android-dialog


【解决方案1】:

下面是我如何将附加信息传递给对话框。

  1. 创建一个静态方法,该方法将创建对话框并在包中设置额外内容。

    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;
    }
    
  2. onCreateDialog 方法中访问包中的字符串

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

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

【讨论】:

    【解决方案2】:

    我如何将 extras 传递给这个扩展 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);
    

    所以如果你打电话给他们中的一个,你就可以了。

    【讨论】:

      【解决方案3】:

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

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

      然后,您可以使用班级其他地方的数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-22
        • 1970-01-01
        • 2014-01-21
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 2015-04-02
        相关资源
        最近更新 更多