Как поместить или отправить мой метод из моей деятельности в другой класс, чтобы вызвать его? - PullRequest
0 голосов
/ 27 февраля 2019

Вот идея, которую я пытаюсь реализовать в своем приложении:

MainActivity получил метод с именем getServer().теперь я использую другой класс с именем (Dialogs).когда приложение не может добраться до сервера, я использую это диалоговое окно «Активность», чтобы позволить людям попробовать еще раз, если проблема устранена.теперь я создал класс с диалогами и использую его как ссылку, проблема в том, что я могу передать контекст или другие вещи, но я не знаю, можно ли передать метод в диалоговое окно, чтобы открыть его.

Я не пытаюсь вызывать метод в классе, в этом случае я должен создать класс для каждого диалога, который я создаю, чтобы вызвать метод в действии.я хочу использовать один класс диалога и отправить ему метод для вызова, когда пользователь нажмет кнопку «Да».

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.

MainActivity:

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

1 Ответ

0 голосов
/ 27 февраля 2019

Есть несколько вещей, которые вы можете сделать.

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

И передать слушателя в диалог так же, как решение a

Я считаю, что b лучше, потому что вы создаете простой объект Listener и передаете его, а непрохождение всей реализованной деятельности.

Существует больше решений, чем эти, если это не поможет, например, попытаться найти шаблон EventBus.

...