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