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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
arvalon
21 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 158
Записей в блоге: 1
#1

Как листать фрагменты в ViewPager по кнопке? - Программирование Android

17.06.2016, 18:26. Просмотров 408. Ответов 3
Метки нет (Все метки)

Доброго дня.

Есть фрагменты, Листаемые в ViewPager'е. Помимо возможности перелистывания фрагментов жестами (и в шапке, во вкладках) хотелось что бы аналогичные действия срабатывали по кнопкам "Следующий"/"Предыдущий". Добавил обработчик события на кнопку но далее не понимаю что надо сделать...

Класс фрагмента:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class EquipmentFragment extends Fragment {
 
    private Button buttonNext;
 
    public static Fragment getInstance()
    {
        Fragment fragment = new EquipmentFragment();
        return fragment;
    }
 
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
 
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_equipments, container, false);
 
        buttonNext=(Button)view.findViewById(R.id.equipment_next);
        buttonNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO: 17.06.2016  
            }
        });
 
        return view;
    }
}


Класс активности, содержащей вкладки и viewPager с фрагментами
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class Equipments extends AppCompatActivity {
 
    private ViewPager viewPager;
    private Toolbar toolbar;
    private TabLayout tabLayout;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_equipments);
 
 
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle(R.string.equipments);
        getSupportActionBar().setDisplayShowTitleEnabled(true);
 
 
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);
 
        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
 
    }
 
    private void setupViewPager(ViewPager viewPager)
    {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
 
        DatabaseAccess databaseAccess=DatabaseAccess.getInstance(this);
        databaseAccess.open();
        List<Equipment> equipments=databaseAccess.getFullEquipments();
        for (Equipment equipment:equipments){
            adapter.addFragment(EquipmentFragment.getInstance(equipment.getId(),equipment.getRuname(),equipment.getImage(),equipment.getAvaliable()), String.valueOf(equipment.getId()));
        }
        databaseAccess.setActivationDB();
        databaseAccess.close();
 
        viewPager.setAdapter(adapter);
 
    }
 
    static class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> fragmentList = new ArrayList<>();
        private final List<String> tabs = new ArrayList<>();
 
        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }
 
        public void addFragment(Fragment fragment, String title)
        {
            fragmentList.add(fragment);
            tabs.add(title);
        }
 
        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }
 
 
        public Fragment setItem(){
            return viewPager.setCurrentItem(getItem(+1));
        }
 
 
        @Override
        public int getCount() {
            return fragmentList.size();
        }
 
        @Override
        public CharSequence getPageTitle(int position) {
            return tabs.get(position);
        }
    }
}


Поискал и нашёл на stackoverflow.com что-то подходящее и написал метод setItem в класс ViewPagerAdapter

Java
1
2
3
public Fragment setItem(){
            return viewPager.setCurrentItem(getItem(+1));
        }
ЧТо-то не так, компилятор ругается на viewPager в этом методе, Error: non-static variable viewPager cannot be referenced from a static context.
Подскажите пожалуйста, какой метод написать, что вызвать в обработчике событий кнопок "Вперёд-Назад"?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2016, 18:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как листать фрагменты в ViewPager по кнопке? (Программирование Android):

Скроллинг ViewPager-а как у ListView - Программирование Android
Как сделать скроллинг у ViewPager-а по несколько элементов сразу, в зависимости от скорости жеста, и доводить до просчитанной позиции? ...

Как обновить viewpager или listfragment? - Программирование Android
Добрый день! Помогите пожалуйста разобраться в следующем вопросе. У меня есть ViewPager с FragmentPagerAdapter и десять ListFragment...

ViewPager как узнать текущую View - Программирование Android
Добрый вечер ув. Программисты. Есть ViewPager с даптером и прочими приблудами. Когда я пролистываю листы, каким методом они...

ViewPager внутри ListView, Как вставить? - Программирование Android
Здравствуйте. Есть задача, внутри ListView сделать айтемы, которые содержат ViewPager Вот фрагмент кода, в котором я пытаюсь просто...

Как заставить работать ViewPager + TabLayout в ScrollView? - Программирование Android
Здравствуйте. Столкнулся с проблемой - ViewPager напрочь отказывается отображаться в ScrollView. При этом вне ScrollView всё работает как...

Как отобразить ViewPager внутри другой активити - Программирование Android
Подскажите пожалуйста. Изучил данный урок. И хочу сделать такую прокрутку страниц внутри класса, который наследуются от активити, а не от...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2471 / 1916 / 595
Регистрация: 12.05.2014
Сообщений: 6,741
Завершенные тесты: 1
17.06.2016, 18:36 #2
ну у пейджера есть метод setCurrentItem куда надо передавать новер вкладки (начиная с 0)
arvalon
21 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 158
Записей в блоге: 1
17.06.2016, 18:38  [ТС] #3
Цитата Сообщение от Паблито Посмотреть сообщение
у пейджера есть метод setCurrentItem
Да, а как его из кнопки дёрнуть? Она вообще в другом классе и методы пейджера не видит...
Kadagor
12 / 12 / 4
Регистрация: 17.09.2015
Сообщений: 47
19.06.2016, 14:45 #4
Цитата Сообщение от arvalon Посмотреть сообщение
Она вообще в другом классе и методы пейджера не видит...
Как вариант, расположи кнопки перелистывания в одной активности с пейджером. Я бы сделал это поверх него:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 <FrameLayout ...>
   <ViewPager .../>
   <ImageView
         ...
         android:id="@+id/imgPagerLeft"
         android:layout_gravity="left|center_vertical"
         android:clickable="true" />
 
   <ImageView
         ...
         android:id="@+id/imgPagerRight"
         android:layout_gravity="right|center_vertical"
         android:clickable="true" />
 </FrameLayout>
Цитата Сообщение от arvalon Посмотреть сообщение
Да, а как его из кнопки дёрнуть?
В onClick:
Java
1
2
3
4
5
6
7
8
switch (v.getId()) {
   case R.id.imgPagerLeft:
      if(viewPager.getCurrentItem()>0) viewPager.setCurrentItem(viewPager.getCurrentItem()-1);
      break;
   case R.id.imgRight:
      if(viewPager.getCurrentItem()<(viewPager.getChildCount()-1)) viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
      break;
}
2 Я бы советовал использовать метод addOnPageChangeListener и проверять:
- Если текущий элемент нулевой - скрываем кнопку "влево"
- Если текущий элемент последний - скрывать кнопку "вправо"
- Во всех других случаях: если кнопка влево невидима - установить видимой; если кнопка вправо невидима - установить видимой (ну или просто установить видимость кнопкок)

Добавлено через 3 минуты
И проверять, если значение getChildCount() < 2, тоже скрывать кнопки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2016, 14:45
Привет! Вот еще темы с ответами:

ViewPager (Tabbed activity) как добавить данные на сраницы? - Программирование Android
Среда андройд студио. &quot;я создал&quot; проект из коробки tabbed activity, автоматом создалось 2 xml, main отвечает за виджеты ,а второй за...

ListView + ViewPager как правильнее организовать экспорт в Excel? - Программирование Android
Здравствуйте! 1.) на каждой странице Pager'а свой список, как подготавливать данные (со всех страниц) для экспорта в Ecxel-файл? ...

Как создать вкладки Tabs c ViewPager material design - Программирование Android
Добрый день форумчане! Нужна ваша помощь! Как создать так называемый Tabs Вкладки с viewPager в API 21 (material design)? ...

Листать картинки - Программирование Android
На устройстве есть папка с картинками подскажите как отобразить их на экране по одной а при проведении по картинке в бок появлялась другая....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.06.2016, 14:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru