Короткий ответ: вам нужно выполнить обратный вызов следующим образом:
function callback(response) {
// Here you can do what ever you want with the response object.
console.log(response);
}
$.ajax({
url: "...",
success: callback
});
На основании другого ответа, который я написал здесь . Я изменил код в соответствии с вашим вопросом.
Подробнее о сенсорной иерархии здесь
dispatchTouchEvent()
метод должен быть переопределен в классе Activity
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (isDrawerOpen()) { //Your code here to check whether drawer is open or not.
View content = findViewById(R.id.drawer); //drawer view id
int[] contentLocation = new int[2];
content.getLocationOnScreen(contentLocation);
Rect rect = new Rect(contentLocation[0],
contentLocation[1],
contentLocation[0] + content.getWidth(),
contentLocation[1] + content.getHeight());
if (!(rect.contains((int) event.getX(), (int) event.getY()))) {
isOutSideClicked = true;
} else {
isOutSideClicked = false;
}
} else {
return super.dispatchTouchEvent(event);
}
} else if (event.getAction() == MotionEvent.ACTION_DOWN && isOutSideClicked) {
isOutSideClicked = false;
return super.dispatchTouchEvent(event);
} else if (event.getAction() == MotionEvent.ACTION_MOVE && isOutSideClicked) {
return super.dispatchTouchEvent(event);
}
if (isOutSideClicked) {
return true; //restrict the touch event here
}else{
return super.dispatchTouchEvent(event);
}
}
Примечание. Как упоминалось в комментариях к вопросу, это противоречит рекомендациям Android для Android . Поэтому старайтесь избегать этого, пока это не будет обязательным.
очень просто использовать экземпляр ящика, чтобы предотвратить
1. реализовать DrawerLayout.DrawerListener
2. добавьте этот единственный оператор внутри этого метода us
@Override
public void onDrawerOpened(View drawerView) {
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);//DrawerLayout instance
}
Упрощенная версия ответа Noundla, который работает для меня. Я написал свой пользовательский Drawer, который расширяет DrawerLayout
и реализует метод dispatchTouchEvent()
.
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (!this.isDrawerOpen(Gravity.LEFT)) {
return super.dispatchTouchEvent(event);
}
boolean isOutSideClicked = false;
if (event.getAction() == MotionEvent.ACTION_UP) {
View content = findViewById(R.id.drawer_view);
int[] contentLocation = new int[2];
content.getLocationOnScreen(contentLocation);
Rect rect = new Rect(contentLocation[0],
contentLocation[1],
contentLocation[0] + content.getWidth(),
contentLocation[1] + content.getHeight());
isOutSideClicked = !(rect.contains((int) event.getX(), (int) event.getY()));
}
this.setDrawerLockMode(isOutSideClicked ? DrawerLayout.LOCK_MODE_LOCKED_OPEN : DrawerLayout.LOCK_MODE_UNLOCKED);
return super.dispatchTouchEvent(event);
}
Также, если вы хотите продолжать взаимодействовать с основным фрагментом контента, когда ящик открыт, вы должны добавить эту строку в начале метода.
getChildAt(0).dispatchTouchEvent(event);