Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从自定义对话框类更改主UI_Java_Android_Customdialog - Fatal编程技术网

Java 从自定义对话框类更改主UI

Java 从自定义对话框类更改主UI,java,android,customdialog,Java,Android,Customdialog,我有两个班,主班和副班 主要 对话顺序 public class DialogOrder extends Dialog { Button button; Main main; Activity context; public DialogOrder(Activity context) { super(context); this.context = context; } @Override protected void onCreate(Bundle savedInsta

我有两个班,主班和副班

主要

对话顺序

public class DialogOrder extends Dialog {
Button button;
Main main;
Activity context;


public DialogOrder(Activity context) {
    super(context);

    this.context = context;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
 setContentView(R.layout.order_dialog);
 main = new Main();
 button = (Button)findviewbyid(R.id.bd);

 button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

           main.update_UI();
           dismiss();
        }
    });
}}
我想要的是,当用户按下对话框上的按钮时,将订单图像设置为不可见 现在密码给我 java.lang.NullPointerException

可能我尝试更新错误的UI
所以,有人能告诉我从子类更新父UI类的正确方法吗

您可以通过将主片段传递给对话框构造函数来更新主片段,也可以使用
侦听器/回调
在主片段和对话框之间进行通信

最佳做法是使用侦听器/回调,因为对话框不应访问调用者。这也是从主片段解耦对话框

首先,通过对话框中的接口创建侦听器:

public class DialogOrder extends Dialog {
  ...
  Activity context;
  private DialogListener listener;

  public interface DialogListener {
    void onButtonClicked();
  }

  public DialogOrder(Activity context, DialogListener listener) {
    super(context);
    this.context = context;
    this.listener = listener;
  }

  ...

}
然后,当按钮单击时,调用侦听器:

public class DialogOrder extends Dialog {

  Activity context;
  private DialogListener listener;

  public interface DialogListener {
    void onButtonClicked();
  }

  public DialogOrder(Activity context, DialogListener listener) {
    super(context);
    this.context = context;
    this.listener = listener;
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    ...

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           listener.onButtonClicked();
           dismiss();
        }
    });
  }
}
现在,您可以使用侦听器创建对话框。大概是这样的:

DialogOrder.DialogListener listener = new DialogOrder.DialogListener() {
   @Ovveride
   public void onButtonClicked() {
     update_UI();
   }
};

DialogOrder dialogOrder = new DialogOrder(getActivity(), listener);
dialogOder.show();

主片段将侦听对话框中单击的按钮。

您正在尝试在对话框中创建主片段的新实例。它与底层片段不同。在main fragment中设置dialog Disclose/cancel listener,然后您可以根据您的逻辑再次更新ui。您的意思是我需要在main中创建对话框,而不是作为外部对话框,但我确实需要将对话框保留在另一个类中,而不是在同一个类中完全符合我的需要,真的谢谢^_^
DialogOrder.DialogListener listener = new DialogOrder.DialogListener() {
   @Ovveride
   public void onButtonClicked() {
     update_UI();
   }
};

DialogOrder dialogOrder = new DialogOrder(getActivity(), listener);
dialogOder.show();