Java 如何将我的方法从活动中放入或发送到另一个类以调用它?

Java 如何将我的方法从活动中放入或发送到另一个类以调用它?,java,android,android-alertdialog,Java,Android,Android Alertdialog,以下是我在应用程序中尝试的想法: MainActivity获取了一个名为getServer()的方法。现在我正在使用另一个名为(Dialogs)的类。当应用程序无法到达服务器时,我会使用此对话框激活活动,以便在问题修复后让用户重试。现在我用Dialogs创建了一个类,并将其用作引用,问题是我可以传递上下文或其他内容,但我不知道是否可以将方法传递给dialog来打开它 我并没有试图在类中调用方法,在这种情况下,我应该为我构建的每个对话框创建类来调用活动中的方法。我想使用一个对话框类,并将方法发送给

以下是我在应用程序中尝试的想法:

MainActivity
获取了一个名为
getServer()的方法。现在我正在使用另一个名为(Dialogs)的类。当应用程序无法到达服务器时,我会使用此对话框激活活动,以便在问题修复后让用户重试。现在我用Dialogs创建了一个类,并将其用作引用,问题是我可以传递上下文或其他内容,但我不知道是否可以将方法传递给dialog来打开它

我并没有试图在类中调用方法,在这种情况下,我应该为我构建的每个对话框创建类来调用活动中的方法。我想使用一个对话框类,并将方法发送给它,以便在用户点击yes按钮时调用它

提交人:

>well there's not anything about presenter, just a simple call with retrofit
=> if response was ok, then show data(view)
=> throw or error => open Dialog(view) => this method call Dialog.Java class and ask it to call getServer() method.
主要活动:

> i want to pass getServer to Dialog.class
public void getServer() {
    mPresenter.setupServer();
}
对话类:

    public static void RefreshDialog(final Context context) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("run again?");
    builder.setMessage("there's a problem with your connection or our server, wanna try again?");

    builder.setNegativeButton("yes, please.", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            > want to dialog call method that received and open it if i've got yes,please!

        }
    });

    builder.setPositiveButton("nah", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });

    builder.show();
}

你可以做几件事

a) 创建一个接口并使您的活动实现该接口

接口应该有一个方法(例如onRetryClick()),活动应该实现这个方法,在这个方法中调用getServer()

接口:

interface Listener {
  onRetryClick();
}
活动:

class MyActivity implements Listener {
  ...
  @Override
  public onRetryClick() {
    getServer();
  }
}
调用对话框时,将活动作为参数传递,对话框应该能够在参数中接收侦听器对象

public showErrorDialog(final Listener listener) {...}
b) 您可以创建同一个侦听器,并在“活动”中创建该侦听器的实例,并显式定义该方法

class MyActivity {
  ...
  private Listener listener = new Listener() {
    @Override
    public onRetryClick() {
      getServer();
    }
  }
}
并以与解决方案相同的方式将侦听器传递给对话框

我认为b更好,因为您创建了一个简单的侦听器对象并传递它,而不是传递整个实现的活动


还有比这些更多的解决方案,例如,如果这对查找EventBus模式没有帮助的话。

我正在尝试解决它,另一个问题是使用上下文的警报拨号,我是通过活动对话框提供的。方法(此)…对不起,我不理解其他问题,您能解释更多吗?没问题,已修复。谢谢你的回答。目前工作顺利。