Этот вопрос является развитием темы Java: обойти необходимость невозможного изменения значения локальной переменной извне. Из ответов на вопрос я понял, что суть проблемы не та, котрую я изначально предположил, и она заслуживает отдельного вопроса.
Повторю задачу. У нас есть FloatingActionButton;
при нажатии которого появляется диалоговое окно (или popupWindow
, не суть важно), а при повторном нажатии - исчезает. Также окно должно исчезнуть при нажатии в любом месте вне окна.
private void initFAB(){
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
LayoutInflater layoutInflater = (LayoutInflater) getBaseContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
View popupWindowContent = layoutInflater.inflate(R.layout.popup_window_content, null);
final PopupWindow popupWindow = new PopupWindow(popupWindowContent,
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setOutsideTouchable(true);
if (fab.getTag().toString().equals("0")){
rotateFabForward();
View.OnClickListener onClickListener = new View.OnClickListener() {
public void onClick(View view) {
//...
}
};
// ...
popupWindow.showAtLocation(fab, Gravity.END | Gravity.BOTTOM, 50, 400);
fab.setTag("1"); // visible state
}
else{
rotateFabBackward();
popupWindow.dismiss();
fab.setTag("0"); // hidden state
}
}
});
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
rotateFabBackward();
fab.setTag("0");
}
});
}
Если закрывать окно только касанием вне окна, но без кнопки, то всё будет нормально. При нажатии же на кнопку с целью закрыть окно срабатывают два события: Dismiss
и Click
. Одновременно они срабатывают, или последовательно, не знаю, но так или иначе, OnDismissListener
заканчивает выполнение раньше и мы приходим в onClick
с нулевым тагом и в else
не попадаем.
Что-нибудь можно сделать? Может есть аналог stopPropagation
из JavaScript?
Попробуйте воспользоваться AlertDialog'ом c лиснерами для каждой кнопки и отдельным слушателем для всего диалога(setOnDismissListener), если я правильно понял вашу проблему.
AlertDialog.Builder b = new AlertDialog.Builder(context);
b.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
b.setPositiveButton("OK",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
b.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
}
});
Какую среду разработки/движок и технологии посоветуете?
Всем привет!Есть приложение которое отправляет данные на удаленную БД MySQLВсе было прекрасно пока не начал тестировать в реальном времени...