переключаться между разными слушателями - PullRequest
0 голосов
/ 29 августа 2018

Я использую слушатель жестов для мониторинга действий пользователя, но когда приложение открывает диалоговое окно, я не знаю, как переключить мой слушатель жестов на диалоговое событие и обработать кнопку события (ОК и отмена), может кто-нибудь дать мне предложение?

Псевдокод это нравится

 public class MainActivity extends FragmentActivity
        implements ConnectionEventListener{
        ......
        // when connection established,
        // pop a diaglog (android native diaglog with listview and its adapter) to ask user to select ok or cancel button
        @Override
        public void onUpdateAlert(final int event, final String message){
        }

        // gesture listener
        // if a dialog pops up, the pose can be used to select OK or cancel
        @Override
        public void onDetected(Hand pose){
        }
}

Проблема у меня не в прослушивателе кнопок. На самом деле, у меня одновременно работают два слушателя, один для монитора событий, а другой для монитора позы. Когда событие происходит, событие всплывет диалоговое окно, чтобы выбрать «ОК» или «Отмена». Тем временем слушатель позы все еще работает. Я хотел бы знать, когда происходит этот случай, как я могу использовать слушателя позы, чтобы выбрать «ок» или «отменить», пока диагольд всплывает?

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, нам нужно что-то вроде этого:

public static void showDialog(SomeActivity someActivity, final SomeCallback callBack {
    final Dialog dialog = new Dialog(someActivity);

    dialog.setContentView(R.layout.dialog_with_buttons);

    // OK button ...
    Button dialogButtonOk = dialog.findViewById(R.id.btn_ok);
    dialogButtonOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            callBack.execute(true);
            dialog.dismiss();
        }
    });

    // Cancel button ...
    Button buttonCancel = dialog.findViewById(R.id.btn_cancel);
    buttonCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            callBack.execute(false);
            dialog.dismiss();
        }
    });

    dialog.show();
}

мы можем вызвать showDialog из SomeActivity следующим образом:

showDialog(this, new SomeCallback () {
    @Override
    public void execute(boolean status) {
        if (status) {
            ...
        } else {
            ...
        }
    }
});

и интерфейс обратного вызова:

public interface SomeCallback {
    void execute(boolean status);
}

удачи


псевдокод может иметь вид:

boolean status = false;

@Override
public void onUpdateAlert(final int event, final String message){
    status = true;    
    // pop up the dialog
}

@Override
public void onDetected(Hand pose){
    if(status) {
            status = false;
            ...          
    }
}
...