Показывать панель действий, когда пользователь некоторое время не взаимодействует в Android
Здравствуйте, в моем приложении для Android. Я хотел бы скрыть панель действий при взаимодействии с пользователем и показать ее снова, когда пользователь перестал взаимодействовать в течение некоторого времени. Теперь у меня уже есть код для скрытия панели действий:
mViewPager.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
getActionBar().hide();
return false;
}
});
Я просто добавил onTouchListener в мой основной вид
Но я не знаю, как реализовать getActionBar.show();
метод. Как мне узнать, не взаимодействовал ли пользователь, скажем, в течение 2 секунд, и таким образом реализовать getActionBar().show();
?
Заранее спасибо...
РЕДАКТИРОВАТЬ:
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
SystemClock.sleep(3000);
if (isCancelled()) {
break;
}
return null;
}
Этот код дает ошибку. break can only be used inside loop or switch
, Как реализовать onCancelled()
3 ответа
В конечном итоге вы должны отслеживать взаимодействие с пользователем. посмотрите на этот пост: отслеживание времени простоя пользователя в приложении-андроиде
Используя эту концепцию, вы можете отслеживать время и сохранять предпочтения.
Теперь оставшаяся логика предназначена только для отображения панели действий, если пользователь не активен в течение некоторого интервала времени (предположим, 2 секунды).
Для этого Вы можете создать Thread
внутри вашего Activity
который периодически (в вашем случае, каждые 2 секунды) проверяет время последнего взаимодействия с пользователем, вызывая getElapsed()
method.if getElapsed()
больше, чем вы хотите (2 секунды). Затем показать панель действий с помощью getActionBar().show()
метод.
Вы можете настроить AsyncTask, поставить там режим ожидания перед отображением панели действий, и, если пользователь коснется чего-либо еще, отмените задачу. Смотрите здесь для отмены задачи. Я бы поставил проверку isCancelled() после сна и перед показом ActionBar
РЕДАКТИРОВАТЬ: Что бы я сделал для вашей проблемы
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
SystemClock.sleep(3000);
if (!isCancelled()) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//Show the actionbar code here
}
});
}
return null;
}
Возможно, вам нужно поведение FullScreenActivity, подобное тому, которое представлено в шаблоне FullScreenActivity. Узнайте больше об этом: http://developer.android.com/tools/projects/templates.html
При этом у вас будет бесплатно хорошо протестированный код с поведением: автоматически скрывать панель действий и показывать ее обратно при взаимодействии.