Как определить взаимодействие пользователя в диалоговом окне?

#android #dialog #user-interaction

#Android #диалоговое #взаимодействие с пользователем

Вопрос:

Я могу обнаружить взаимодействие с пользователем в activity с помощью этого кода:

 @Override
public void onUserInteraction() {
    super.onUserInteraction();
}
  

Но Android Dialog не имеет подобного метода. И я не смог найти способ справиться с этим.

Как я могу это сделать?

Комментарии:

1. Вы пробовали, получаете ли вы события onUserInteraction в своей активности во время отображения диалогового окна? Если да, вы можете отслеживать, отображается ли диалоговое окно, и соответствующим образом обрабатывать обращение.

2. Я не смог получить события в своей активности.

3. Есть ли у вас какое-либо решение для этого??

4. У @Burak есть какое-либо решение для этого?

Ответ №1:

Вы можете использовать AppCompatActivity, оформленный как dialog with style, вместо обычного диалогового окна Android

 <style name="AlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
...
</style>
  

Тогда вы могли бы использовать функциональность класса Activity

Вы также должны использовать следующий onCreate:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(android.support.v7.appcompat.R.layout.abc_alert_dialog_material);
}
  

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

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

 @BindView(android.support.v7.appcompat.R.id.topPanel)
protected ViewGroup mTopPanel;
@BindView(android.support.v7.appcompat.R.id.contentPanel)
protected ViewGroup mContentPanel;
@BindView(android.support.v7.appcompat.R.id.customPanel)
protected ViewGroup mCustomPanel;
@BindView(android.support.v7.appcompat.R.id.custom)
protected ViewGroup mCustomViewContainer;
@BindView(android.support.v7.appcompat.R.id.textSpacerNoButtons)
protected View mTextSpacer;
@BindView(android.support.v7.appcompat.R.id.buttonPanel)
protected ButtonBarLayout mButtonPanel;

@BindView(android.R.id.message)
protected TextView mMessage;
@BindView(android.R.id.button1)
protected Button mPositiveButton;
@BindView(android.R.id.button2)
protected Button mNegativeButton;
@BindView(android.R.id.button3)
protected Button mNeutralButton;
  

(Включены аннотации Butterknife, если вы не используете Butterknife, просто используйте findViewById для каждой аннотации из @BindView (id))