Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Starikov
13 / 15 / 5
Регистрация: 16.10.2016
Сообщений: 206
Завершенные тесты: 1
1

Tab Layout программно сменить вкладку

21.08.2017, 12:37. Просмотров 1365. Ответов 4
Метки нет (Все метки)

Здравствуйте формучане!
Есть фрагмент с TabLayout и c ViewPager. Он у меня запускается с двух мест в программе. У TabLayout-а есть 2 вкладки. Как сделать чтобы запуская с первого места я открывал и была открыта первая вкладка, а запуская с второго места была активна 2 вкладка?
Вот код PagerAdapter:
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
package com.starikov.assistant.pager_adapters;
 
import android.support.v4.app.ListFragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
 
import com.starikov.assistant.additional_material.AlgebraM;
import com.starikov.assistant.subjects.AlgebraF;
 
public class AlgebraPagerAdapter extends FragmentStatePagerAdapter{
 
    int mNumOfTabs;
 
    public AlgebraPagerAdapter(FragmentManager fm, int numOfTabs) {
        super(fm);
        this.mNumOfTabs = numOfTabs;
    }
 
    @Override
    public ListFragment getItem(int position) {
        switch (position) {
            case 0:
                AlgebraF tab1 = new AlgebraF();
                return tab1;
            case 1:
                AlgebraM tab2 = new AlgebraM();
                return tab2;
            default:
                return null;
        }
    }
 
    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}
А вот сам фрагмент:
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
package com.starikov.assistant;
 
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
import com.starikov.assistant.pager_adapters.AlgebraPagerAdapter;
 
public class Algebra extends Fragment{
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
 
        return inflater.inflate(R.layout.algebra, container, false);
    }
 
    @Override
    public void onResume() {
        super.onResume();
        getActivity().setTitle("Алгебра");
        MainActivity.firstListFrag = true;
    }
 
    @Override
    public void onPause() {
        super.onPause();
        MainActivity.firstListFrag = false;
    }
 
    @Override
    public void onStart() {
        super.onStart();
 
        View view = getView();
 
        if(view != null) {
 
            final TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
            tabLayout.addTab(tabLayout.newTab().setText("Формулы"));
            tabLayout.addTab(tabLayout.newTab().setText("Дополнительный материал"));
 
            final ViewPager viewPager = (ViewPager) view.findViewById(R.id.pager);
            final AlgebraPagerAdapter adapter = new AlgebraPagerAdapter(getActivity().getSupportFragmentManager(), tabLayout.getTabCount());
            viewPager.setAdapter(adapter);
            viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
            tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                    viewPager.setCurrentItem(tab.getPosition());
                }
 
                @Override
                public void onTabUnselected(TabLayout.Tab tab) {
 
                }
 
                @Override
                public void onTabReselected(TabLayout.Tab tab) {
 
                }
            });
        }
    }
}
Прошу помощи!
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2017, 12:37
Ответы с готовыми решениями:

Tab Layout with Swipeable Views
Делаю вкладки по этому примеру -...

Программно изменить ширину layout-а в dp
Здравствуйте, подскажите пожалуйста, как программно изменить ширину layout-а в dp? Нашел...

Как программно добавить элемент в уже существующий layout?
как программно добавить элемент в уже существующий layout? например при нажатии кнопки. нужно...

Программно сменить тип сети 2G/3G/4G
Вопрос такой возник, возможно программно менять тип сети (2G/3G/4G)?

Сменить цвет progress bar программно
Привет. Собственно сабж. Что я понял, фон прогресс бара хранится в drawable в 3-х слоях, это...

4
ExFau$t
966 / 765 / 229
Регистрация: 08.05.2012
Сообщений: 3,665
21.08.2017, 12:44 2
Ну самое простое передать в Bundle из этих мест позицию вкладки, которую надо открыть. Может я не так понял.
0
Starikov
13 / 15 / 5
Регистрация: 16.10.2016
Сообщений: 206
Завершенные тесты: 1
21.08.2017, 12:49  [ТС] 3
Цитата Сообщение от ExFau$t Посмотреть сообщение
передать в Bundle из этих мест позицию вкладки, которую надо открыть
А как это сделать?
0
264D
33 / 35 / 9
Регистрация: 03.02.2017
Сообщений: 141
21.08.2017, 15:39 4
Лучший ответ Сообщение было отмечено Starikov как решение

Решение

Цитата Сообщение от Starikov Посмотреть сообщение
А как это сделать?
ViewPager занимается отображением страниц, свайпом страниц, анимацией переходов между ними.
PagerAdapter создает то, что будет отображать ViewPager и управляет жизненным циклом созданных страниц.
Для того чтобы отобразить фрагмент/активность с конкретной открытой вкладкой можно использовать метод mViewPager.setCurrentItem(0 или 1) как в вашем случае.

Java
1
2
3
Bundle args = new Bundle();
args.putInt(ARG_PRIMARY_ITEM, 0 или 1);
myAwesomeAlgebraFragment.setArguments(args);
ну а во фрагменте извлекаете соответствующий параметр:
Java
1
2
mPrimaryItem = getArguments().getInt(ARG_PRIMARY_ITEM);
mViewPager.setCurrentItem(mPrimaryItem);
1
Starikov
13 / 15 / 5
Регистрация: 16.10.2016
Сообщений: 206
Завершенные тесты: 1
21.08.2017, 19:13  [ТС] 5
Цитата Сообщение от 264D Посмотреть сообщение
mViewPager.setCurrentItem(mPrimaryItem);
Спасибо вот за это)
Получение переменной я реализовал по другому так как не смог реализовать с аргументами

Добавлено через 14 секунд
Цитата Сообщение от 264D Посмотреть сообщение
mViewPager.setCurrentItem(mPrimaryItem);
Спасибо вот за это)
Получение переменной я реализовал по другому так как не смог реализовать с аргументами
0
21.08.2017, 19:13
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2017, 19:13

Анимированный дизайн смены Layout или просто выдвигаемый layout
Ну, думаю тут и так всё понятно. Я просто не знаю, какие ключевые слова вводить в гугл, всё что...

Не хочет работать в layout, но включается в layout-land
доброе утро ! пишу первое приложение. обычный мейн.хмель выглядит вот так : <?xml...

At android.widget.LinearLayout.setChildFrame Layout в Layout-те
Нужен совет бывалых. У меня есть активити которое запускается с мейн активити, на нем лежит Layout...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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