Показывать панель действий, когда пользователь некоторое время не взаимодействует в 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

При этом у вас будет бесплатно хорошо протестированный код с поведением: автоматически скрывать панель действий и показывать ее обратно при взаимодействии.

Другие вопросы по тегам