2013-10-08 2 views
0

im пытается проверить, когда мой пользователь перестает прокручивать.Runnable wont run

Для этого я использую этот метод:

commentsLayout.setScrollViewListener(new ScrollViewListener() { 

      @Override 
      public void onScrollChanged(WallScrollView scrollView, int x, int y, 
        int oldx, int oldy) { 
       // TODO Auto-generated method stub 

       oldCommentsYDiefference = oldy; 
       commentsYDiefference = y; 

          //do something 
} 

Я заметил, что, когда пользователь остановки прокрутки разницу между oldCommentsYDiefference и commentsYDiefference всегда 1.

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

public void checkFromScrolling() 
    { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 

       Log.i("commentsYDiefference", commentsYDiefference+""); 
       Log.i("oldCommentsYDiefference", oldCommentsYDiefference+""); 

       if(commentsYDiefference - oldCommentsYDiefference == 1 || oldCommentsYDiefference - commentsYDiefference == 1) 
       { 

        if(checkWallScroll) 
         new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() { 

             //do things 

          oldCommentsYDiefference = commentsYDiefference; 

          checkWallScroll = true; 

          } 
        }, 2000); 

        checkWallScroll = false; 
       } 
      } 
     }).start(); 
    } 

Я звоню checkFromScrolling() в мой onCreate.

Моя проблема в том, что Runnable работает только один раз и не все время. Я знаю это, потому что я получаю только один звонок в моем журнале сообщает для

Log.i("commentsYDiefference", commentsYDiefference+""); 
Log.i("oldCommentsYDiefference", oldCommentsYDiefference+""); 

Как сделать Runnable запустить все время деятельность открыта?

+1

Ваш оператор журнала не находится внутри метода runnable run. – Raghunandan

+0

да есть. его внутри public void run() {= – dasdasd

+0

замените '// делаем вещи' по регистрационным данным, а затем попробуйте – Raghunandan

ответ

0

Вы можете добавить проверку while-loop, если логическая переменная (keepRunning) истинна. И тогда вы должны установить значение false до того, как ваша активность будет закрыта.

Смежные вопросы