2016-01-03 2 views
0

Привет поэтому у меня есть следующий код:Держите SwipeRefreshLayout пока задача не закончит работу

В OnCreate:

mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.activity_main_swipe_refresh_layout); 
     mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 

      @Override 
      public void onRefresh() { 
       refreshContent(); 
      } 
     }); 

И в другом методе:

private void refreshContent(){ 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      db = new DatabaseHelper(getApplicationContext()); 
      new RefreshScores().execute(); 
      list.clear(); 
      list.addAll(db.getTracked()); 
      db.closeDB(); 
      mSwipeRefreshLayout.setRefreshing(false); 
      adapter.notifyDataSetChanged(); 
     } 
    },2000); 
} 

В настоящее время, когда я тяну вниз в верхней части моего приложения, появляется обновитель и начинает вращаться. Он исчезает через 2 секунды. Тем не менее, я хочу, чтобы он оставался видимым до тех пор, пока не произойдут RefreshScores().execute() и list.clear(); list.addAll(db.getTracked()); db.closeDB();. RefreshScores - это AsyncTask. Не совсем уверен, как это сделать.

+0

Изменение таймингов для обновления с 2000 по 5000, а затем попробуйте –

+0

@PavanBilagi. Это просто затянет его на 5 секунд? Нет гарантии, что мой другой код еще не закончен. – user2923535

+0

Нет никакой гарантии, но я надеюсь, что новые RefreshScores(). Execute(); Задача Async завершится в этом интервале –

ответ

1

AsyncTask имеет функцию обратного вызова с именем onPostExecute. Этот callback будет вызван в потоке пользовательского интерфейса, когда doInBackground() вернется. См http://developer.android.com/reference/android/os/AsyncTask.html

Вы можете попробовать использовать

mSwipeRefreshLayout.setRefreshing(false); 

непосредственно в этой функции обратного вызова, и переместить другие вызовы, которые требуют новых данных обратного вызова, а также.

+0

Именно то, что я искал, похоже. Благодаря! – user2923535

-1

Редактировать

mSwipeRefreshLayout.post(new Runnable() { 
          @Override 
          public void run() { 
           mSwipeRefreshLayout.setRefreshing(false); 

          } 
         }); 
+0

. Он говорит, что он должен вызываться из потока пользовательского интерфейса, чтобы он не работал. – user2923535

+0

Где я могу добавить свой код? – user2923535

+0

В том же месте, которое вы добавили в первый раз –

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