如何将我的方法从我的 activity 放置或发送到另一个 class 以调用它?
How to put or send my method from my activity to another class to call it?
这是我尝试在我的应用中实现的想法:
MainActivity
获得了名称为 getServer()
的方法。现在我正在使用另一个带有 (Dialogs) 名称的 class。当应用程序无法访问服务器时,我使用此对话框 Activity 让人们在问题解决后重试。现在我用对话框创建了一个 class 并将其用作参考,问题是我可以传递上下文或其他东西,但我不知道是否可以将方法传递给对话框以打开它。
我没有尝试调用 class 中的方法,在这种情况下,我应该为我构建的每个对话框创建 class 以调用 activity 中的方法。我想使用一个对话框 class,并在用户点击“是”按钮时向其发送方法以调用它。
mPresenter:
>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.
主要Activity:
> i want to pass getServer to Dialog.class
public void getServer() {
mPresenter.setupServer();
}
对话框Class:
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) 创建接口并让您的 activity 实现该接口
接口应该有一个方法(例如 onRetryClick();),activity 应该实现这个方法,在那个方法里面调用你的 getServer()。
接口:
interface Listener {
onRetryClick();
}
Activity:
class MyActivity implements Listener {
...
@Override
public onRetryClick() {
getServer();
}
}
调用对话框时将activity作为参数传递,对话框应该能够接收参数中的监听器对象
public showErrorDialog(final Listener listener) {...}
b) 您可以创建相同的侦听器,并在 activity 创建该侦听器的实例并显式定义方法
class MyActivity {
...
private Listener listener = new Listener() {
@Override
public onRetryClick() {
getServer();
}
}
}
并以与解决方案 a 相同的方式将侦听器传递给对话框
我相信 b 更好,因为您创建了一个简单的 Listener 对象并传递它,而不是传递整个已实现的对象 activity。
有比这些更多的解决方案,如果这没有帮助,请尝试寻找 EventBus 模式。
这是我尝试在我的应用中实现的想法:
MainActivity
获得了名称为 getServer()
的方法。现在我正在使用另一个带有 (Dialogs) 名称的 class。当应用程序无法访问服务器时,我使用此对话框 Activity 让人们在问题解决后重试。现在我用对话框创建了一个 class 并将其用作参考,问题是我可以传递上下文或其他东西,但我不知道是否可以将方法传递给对话框以打开它。
我没有尝试调用 class 中的方法,在这种情况下,我应该为我构建的每个对话框创建 class 以调用 activity 中的方法。我想使用一个对话框 class,并在用户点击“是”按钮时向其发送方法以调用它。
mPresenter:
>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.
主要Activity:
> i want to pass getServer to Dialog.class
public void getServer() {
mPresenter.setupServer();
}
对话框Class:
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) 创建接口并让您的 activity 实现该接口
接口应该有一个方法(例如 onRetryClick();),activity 应该实现这个方法,在那个方法里面调用你的 getServer()。
接口:
interface Listener {
onRetryClick();
}
Activity:
class MyActivity implements Listener {
...
@Override
public onRetryClick() {
getServer();
}
}
调用对话框时将activity作为参数传递,对话框应该能够接收参数中的监听器对象
public showErrorDialog(final Listener listener) {...}
b) 您可以创建相同的侦听器,并在 activity 创建该侦听器的实例并显式定义方法
class MyActivity {
...
private Listener listener = new Listener() {
@Override
public onRetryClick() {
getServer();
}
}
}
并以与解决方案 a 相同的方式将侦听器传递给对话框
我相信 b 更好,因为您创建了一个简单的 Listener 对象并传递它,而不是传递整个已实现的对象 activity。
有比这些更多的解决方案,如果这没有帮助,请尝试寻找 EventBus 模式。