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

标签 java android customdialog

我有 2 个类,Main 和 DialogOrder

主要

public class Main extends Fragment{
ImageView order;


@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {

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

               new DialogOrder(getActivity()).show();
            }
        });

  return view;
  }
  public void init(Bundle savedInstanceState) {   
   order = (ImageView) view.findViewById(R.id.order);
   order.setImageResource(R.drawable.orderd);
   RelativeLayout.LayoutParams orderparams = new RelativeLayout.LayoutParams(Main.screenHeight / 8, Main.screenHeight / 8);
   orderparams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
   orderparams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    orderparams.setMargins(Main.screenHeight / 80, Main.screenHeight / 80, Main.screenHeight / 80, Main.screenHeight / 30);

    order.setLayoutParams(orderparams);


 }

  public void update_UI(){

    order.setVisibility(View.INVISIBLE);

}

}

对话顺序

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 类的正确方法是什么?

最佳答案

您可以通过将主 fragment 传递给对话框构造函数来更新主 fragment ,也可以使用Listener/Callback在主 fragment 和对话框之间进行通信。

最佳实践是使用监听器/回调,因为对话框不应该有权访问调用者。这也将 Dialog 与 Main fragment 分离。

首先,通过对话框中的接口(interface)创建监听器:

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();

主要 fragment 将监听对话框中单击的按钮。

关于java - 从自定义对话框类更改主 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47248941/

相关文章:

java - OLTU 能否提供 JWT 作为访问 token

java - 为什么这种(​​错误)使用 Java 泛型的方法无法编译?

java - Groovy 和 grails jdk 问题

java - .putExtra Intent 后应用程序崩溃

java - 有没有办法指示相反方向的标签?

android - 无效的参数类型。必须是 1 和 instanceof LifecycleOwner

java - Android 缺少 android.net.StaticIpConfiguration。无法设置新实例或导入

android - 自定义警报对话框

Android:键入文本时 EditText 不更新