Форум программистов, компьютерный форум CyberForum.ru

Бесконечный ViewPager с тремя элементами - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Милисекунды в Chronometer http://www.cyberforum.ru/android-dev/thread676141.html
Милисекунды в Chronometer. Подскажите как реализовать?
Android Chronometer в андроид java package com.example.stopwatch; import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Chronometer; import android.widget.Toast; http://www.cyberforum.ru/android-dev/thread676136.html
Обмен данными по wi-fi между девайсами Android
Доброго времени суток! Знает кто-нибудь, как можно наладить связь по wi-fi между android устройствами? Возможно ли вообще такое? На просторах интернета ну очень мало информации по этому поводу. Если кто знает, тыкните носом в доки, где это описывается.
Android Обращение к элементам активити из другого класса
Добрый день. Ломаю голову битый час, все не могу понять, почему у меня не получается. Опишу по шагам. Создал проект андроид (в эклипсе), есть layout-файл activity_main.xml, в нем TextView имеющий id tvHello, я создал класс Student, в нем есть конструктор и метод, меняющий этот tvHello и при запуске программы: 1. создается объект этого класса 2. открывается layout файл 3. вызывается метод,...
Android смена цвета http://www.cyberforum.ru/android-dev/thread675712.html
Здравствуйте. В общем вопрос такое есть два layout (1 - игровое поле, 2-настройка игры) во 2-ом layout можно выбрать цвет игрового поля но после нажатия на кнопку "применить" приложение крешуется в java.lang.NullPointerException на смене установки нового цвета так как обращается к другому layout. если перед сменой цвета поставиить setContentView(R.layout.mainactivity)(игровое поле); то...
Android TextView cannot be resolved to a variable package com.samples.Button; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.Button; import android.widget.TextView; import android.view.View; public class ButtonActivity extends Activity { подробнее

Показать сообщение отдельно
Опа!!
14 / 14 / 0
Регистрация: 30.09.2009
Сообщений: 89

Бесконечный ViewPager с тремя элементами - Android

21.10.2012, 01:59. Просмотров 1004. Ответов 0
Метки (Все метки)

Задача - реализовать "бесконечную" прокрутку страниц с использованием ViewPager и PagerAdapter. В качестве элементов выступают View (не Fragment). Все view создаются из единого xml-layout через inflater, отличаются лишь содержанием. Содержание подгружается из API.

В параметрах ViewPager установил ограничение на лимит неактивных страниц слева и справа:
Java
1
mViewPager.setOffscreenPageLimit(1);
Т.о., одновременно могут храниться 1 активная страница и по 1 слева и справа, в случае если их становится больше, вызывается соотв. метод на удаление в PagerAdapter-e. При запуске имеется 1 id, для которого загружается содержание из Интернета с API (картинка + текст). После загрузки первой страницы апи присылает ответ с id следующей страницы, если таковая имеется. id-шники страниц храню в ArrayList<String>: при создании адаптера инициализирую этот список первым значением (id начальной страницы), при получении следующего id добавляю туда следующее значение. Получается, при запуске у меня имеется адаптер, getCount которого возвращает размер этого массива id (mPagesId), в начале он равен 1. Далее адаптер запрашивает 0-вую позицию для ViewPager-a:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  @Override
    public Object instantiateItem(ViewGroup collection, int position) {
       int pageId = Integer.valueOf(mPagesId.get(position));
       View newView = createNewView();
       newView.setId(pageId);
       ((ViewPager) collection).addView(newView);
       // start post loading if there is active network connection
       if (ConnectionUtils.isOnline(mContext)) {
           TaskLoadPost loadPostTask = new TaskLoadPost();
           loadPostTask.execute(pageId);
       } else {
           DialogUtil.showNetworkErrorDialog((Activity) mContext);
       }
       return newView;
    }
В фоне заполняю вьюхи данными из Сети и там же получаю новый id, который добавляю в массив:
Java
1
mPagesId.add(id);
После чего адаптер вновь вызывает метод instantiateItem(...), далее по позиции берется id из массива и все повторяется далее: добавили новое view, загрузили его, загрузили след. Id, поместили в массив и т.д.

На первых шагах все в порядке (рассматриваю только листание вправо сейчас), разве что по достижению 3 или 4 элемента адаптер перед инициализацией новой страницы вызывает метод удаления destroyItem():
Java
1
2
3
4
5
 ((ViewPager) collection).removeView((View) view);
 
    View page = (View) view;
    mPagesId.remove(String.valueOf(page.getId()));
    notifyDataSetChanged();
ОК, удалили, все вроде бы в порядке. После этого размер массива становится равным 3м. Тут начинается самое интересное: после удаления 0 элемента мы в методе initiate вызываемся уже не как логично было бы предполагать со 2 элементом - position == 2 (ведь у нас хранится только 3 страницы), а с 3 - мы лезем по этой позиции за Id, но id там не находим, т.к. массив только что был "сжат". Ну да ладно, думаю, как-нибудь можно выкрутиться. Проскочили, листнули, вновь удалили, снова попадаем в в initiate.. опять же логично ожидать position == 2, 3 ну или черт с ним, 4.. но position приходит равным 1! Что это за единица и откуда и почему она берется - для меня большая загадка. Опять же говнокодом это можно обойти и в случае листания вправо далее вызывается только с позицией = 1 - почему и как мне не ясно.

В общем, суть вопроса: каким образом можно нормально синхронизировать и "подружить" какую-то свою структуру, храняющуюю вспомогательные данные для страниц во ViewPager, с тем поведением, что происходит у ViewPager-a и вызываемыми им методами добавления\удаления с непонятными позициями. Мне действительно нужен дополнительный массив синхронизированный с внутренним хранилищем View во ViewPager, иначе не представляется возможным загружать следующие\предыдущие страницы с API с правильными id-шниками, при этом удаляя ненужные страницы и id. Кто-нибудь сталкивался с чем-то подобным? Может, есть какие-то более элегантные задачи решить мою задачу? Может, я как-то не верно понимаю всю хитрость того, когда и как ViewPager вызывает методы своего адаптера? Для меня эти позиции действительно неясны, а без возможности их предсказания я не могу получать нужные id для загрузки следующих страниц и очистки старых.

Был бы очень благодарен за любой совет, бьюсь над этим уже порядка недели...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru