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

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

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

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

17.06.2016, 18:26. Просмотров 375. Ответов 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 по кнопке?
Посмотрите здесь:
Скроллинг ViewPager-а как у ListView Android
Как обновить viewpager или listfragment? Android
Android ViewPager внутри ListView, Как вставить?
Android ViewPager как узнать текущую View
Android Как отобразить ViewPager внутри другой активити
Как заставить работать ViewPager + TabLayout в ScrollView? Android
ListView + ViewPager как правильнее организовать экспорт в Excel? Android
Как создать вкладки Tabs c ViewPager material design Android
ViewPager (Tabbed activity) как добавить данные на сраницы? Android
Листать картинки Android
Как победить подтормаживание при листании ViewPager со списками listview? Android
Android Не могу разобраться, как подключать Фрагменты

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2421 / 1866 / 583
Регистрация: 12.05.2014
Сообщений: 6,606
Завершенные тесты: 1
17.06.2016, 18:36     Как листать фрагменты в ViewPager по кнопке? #2
ну у пейджера есть метод setCurrentItem куда надо передавать новер вкладки (начиная с 0)
arvalon
21 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 145
Записей в блоге: 1
17.06.2016, 18:38  [ТС]     Как листать фрагменты в ViewPager по кнопке? #3
Цитата Сообщение от Паблито Посмотреть сообщение
у пейджера есть метод setCurrentItem
Да, а как его из кнопки дёрнуть? Она вообще в другом классе и методы пейджера не видит...
Kadagor
12 / 12 / 4
Регистрация: 17.09.2015
Сообщений: 47
19.06.2016, 14:45     Как листать фрагменты в ViewPager по кнопке? #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, тоже скрывать кнопки.
Yandex
Объявления
19.06.2016, 14:45     Как листать фрагменты в ViewPager по кнопке?
Ответ Создать тему
Опции темы

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