2015-04-01 2 views
0

Итак, вот метод, который я нашел в большинстве руководств SwipeRefreshLayout, но мне кажется, что это глупо.Как сделать postDelayed работой по назначению?

Что он делает: он обновляет анимацию за 2000 мс до фактического doStuff().

Что я (очевидно !!) хочу сделать: обновить анимацию, пока она делает doStuff(), а затем остановится. Не требуется таймер! Я делаю что-то неправильно ? Интернет говорит мне нет ...

  view.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
       @Override 
       public void onRefresh() { 
        swipeEmptyView.setRefreshing(true); 
        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          doStuff(); 
          swipeEmptyView.setRefreshing(false); 
         } 
        }, 2000); 
       } 
      }); 
+0

Как бы вы реализовали свой метод doStuff()? –

+0

public void doStuff() { System.out.println ("Test");} или я ничего не знаю, что занимает немного времени. Я хочу, чтобы он продолжал освежать, когда делал что-то. – Waroulolz

+1

FYI, большинство учебных пособий о SRL использует postDelayed, чтобы показать вам, как это работает, поэтому точка не является частью PostDelayed. Предположим, что вы хотите сделать HTTP-запрос для обновления ваших данных, вам «очевидно» нужно добавить его в AsyncTask. Поэтому рассмотрим возможность использования метода onPreExecute для начала загрузки анимации и остановки анимации в onPostExecute. Я могу помочь вам реализовать код, если вы не можете –

ответ

1

Ответ на ваш комментарий должен быть ответом.

  1. Точка запроса http предназначена для выполнения тяжелой работы в фоновом режиме, для чего предназначена AsyncTask. В противном случае вы столкнетесь с Исключением запуска сетевого запроса на Mainthread, пожалуйста, Google, чтобы узнать больше.

  2. О SweepRefreshLayout, я думаю, что он автоматически покажет анимацию загрузки, пока вы не назовете mSwipeLayout.setRefreshing (false). Таким образом, существует 2 вида реализации здесь:

2.1 - Использование AsyncTask для запроса HTTP, используйте собственную загрузку анимации (с или без SwipeRefreshLayout):

public class MyAsyncTask<DummyStuff> extends AsyncTask<Void, Void, Void> { 

    public void onPreExecute() { 
     // start your animation here 
     // NOTE: if you use SwipeRefreshLayout, it will automatically show animation when you swipe your layout down, so please consider your UX to do what you want. 
    } 

    public void onDoinBackground(Void... input) { 
     // do something 
     // http request or something 
     return null; // return what ever you get 
    } 

    public void onPostExecute(Void... result) { 
     // stop your animation here 
     // in case you use SwipeRefreshLayout, call mSRL.setRefreshing(false) here too. 
    } 
} 

2.2 User выше задачи с SwipeRefreshLayout :

я покажу только важные части:

mSRL.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
    @Override 
    public void onRefresh() { 
     (new MyAsyncTask()).execute(); 
    } 
}); 

Выше дзю а идея о том, что должно быть сделано там, пожалуйста, попробуйте сами.

Я обновлю этот ответ позже, с реальным образцом. Но я надеюсь, что вы поняли эту идею.

+0

@Waroulolz, пожалуйста, рассмотрите этот пример: https://github.com/googlesamples/android-SwipeRefreshListFragment –

+0

Спасибо, мне удалось заставить его работать. На самом деле я также знаю, что я хочу делать, освежая. Я хотел бы получить некоторые данные (в основном текст) из Интернета, но не обязательно на веб-сайте! Я хотел бы иметь сервер, который позволяет клиентам получать некоторые текстовые данные. Какой сервер подходит для моих целей? Http или, может быть, просто tcp? Я не знаю много о http, поэтому я не знаю, соответствует ли он моим целям и/или если он хорошо обрабатывает текстовую «базу данных». – Waroulolz

+0

Сначала вы можете попробовать Google App Engine. Вот пример: https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/HelloEndpoints. Для получения дополнительной информации создайте новый вопрос;). –

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

  • Нет связанных вопросов^_^