2017-01-18 5 views
0

У меня есть данные (например, 200 сообщений) и вы хотите быстро загрузить их, чтобы пользователь не видел прогресс/предварительный загрузчик каждый раз, когда он входит на этот экран. Это то, что я делаю:Загрузка данных быстро

  1. Если пользователь открывает окно в первый раз, получить первые 8 сообщения, хранить их (я хранить JSON в виде строки в SharedPreferences), и когда запускается пользователем прокручивая и добирается до 7-го поста, я использую разбивку на страницы (выбор новых 8 сообщений и их добавление) и так далее. Этот случай работает нормально.

  2. Если пользователь уже был в этом scree, я загружаю первые 8 сообщений из SharedPreferences, чтобы сразу увидеть некоторые результаты без начала получения новых результатов. Когда он достигает дна - снова разбивается на страницы. Проблема заключается в том, что при нажатии между элементами нижней панели вкладок есть 1 с задержка, открывающая вкладку с сохраненными данными. И когда вы делаете это несколько раз, это действительно раздражает. Вот что я делаю:

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
             Bundle savedInstanceState) { 
    
        if (isFirstTime) { 
         getFirstEight(); 
         progress.show(); 
        } else { 
         JSONObject data = getStoredJSONFromShared(); 
         if (data != null) { 
          Post[] posts = gson.fromJson(data.getJSONObject("response").get("posts").toString(), Post[].class); 
         } 
        } 
    } 
    

создать это внутри onCreateView, потому что, когда пользователь не видит на экране в первый раз, данные SharedPreferences загружен до того RecycleView инициализации. Возможно, синтаксический анализ медленный, или я не должен создавать это внутри onCreateView.

ответ

0

Что вы можете сделать, это показать прелоадер, когда экран отображается пользователю, даже когда вы извлекаете данные из SharedPrefrences.

Загрузите данные в методе onResume, как только данные будут загружены, вы можете скрыть предварительный загрузчик. Таким образом, по крайней мере, пользователю будет предоставлена ​​визуальная обратная связь, и не будет этого 1 сек отставания, поскольку вы не загружаете что-либо в onCreateView.

+0

Задержка перед открытием нового экрана с щелчком. Например, вы находитесь на пункте 2, щелкая элемент 1, задерживаете одну секунду, а затем показываете первый фрагмент. По этой причине я думаю, что, возможно, потребуется слишком много времени для загрузки данных, и поскольку я делаю это в onCreateView, он не отображает экран немедленно. – charbinary

+0

Да, новый экран с щелчком не будет отображаться до тех пор, пока изображение не будет загружено, а этот код находится в onCreateView. Вот почему вы должны держать onCreateView минимальным и загружать контент в метод onResume. – xaxist