Ручка Таблайаут вкладка нажмите

У меня есть фрагмент с TabLayout и ViewPager в нем:

<FrameLayout 

android_layout_width="match_parent"
android_layout_height="match_parent"

tools_context="layout.LinksFragment">

<android.support.design.widget.TabLayout
    android_id="@+id/tab_layout_info"
    android_layout_width="match_parent"
    android_layout_height="wrap_content"
    android_background="?attr/colorPrimary"
    android_elevation="6dp"
    android_minHeight="?attr/actionBarSize"
    android_theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

<android.support.v4.view.ViewPager
    android_id="@+id/pager_info"
    android_layout_width="match_parent"
    android_layout_height="fill_parent"
    app_layout_behavior="@string/appbar_scrolling_view_behavior"/>

</FrameLayout>

В моем файле фрагмента, внутри метода onCreateView (), я настроил и ViewPager и TabLayout:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_links, container, false);

    TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout_info);
    tabLayout.addTab(tabLayout.newTab());
    tabLayout.addTab(tabLayout.newTab());
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);


    ViewPager viewPager = (ViewPager) view.findViewById(R.id.pager_info);
    PagerAdapterLinks adapter = new PagerAdapterLinks(getActivity().getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

    tabLayout.setupWithViewPager(viewPager);


    return view;
}

На android 5 и выше все работает просто отлично, и я могу изменить между вкладками с помощью салфетки, или нажав на имя вкладки. Тем не менее, на более низкой версии android, нажав на вкладки не делать ничего, и единственный способ изменить страницы в ViewPager является проводя. Как сделать так, чтобы TabLayout работал на android, включая 4.1 и 4.4?

Спасибо за помощь!

2 ответа

  1. Просто добавьте android.поддержка.дизайн.штучка.TabLayout, который будет использоваться для отображения различных параметров вкладки. Андроид.поддержка.v4.вид.Компонент ViewPager будет использоваться для страницы между различными фрагментами, которые мы создадим.

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
        
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_orientation="vertical">
    
        <android.support.design.widget.TabLayout
            android_id="@+id/sliding_tabs"
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            app_tabMode="scrollable" />
    
        <android.support.v4.view.ViewPager
            android_id="@+id/viewpager"
            android_layout_width="match_parent"
            android_layout_height="0px"
            android_layout_weight="1"
            android_background="@android:color/white" />
    

    Теперь, когда у нас есть ViewPager и наши вкладки в нашем макете, мы должны начать определять содержимое каждой из вкладок. Так как каждая вкладка — это только отображаемый фрагмент, нам нужно создать и определить фрагмент, который будет отображаться. В зависимости от требований в приложении может быть один или несколько фрагментов.

    В res / layout / fragment_page.xml определите XML-макет для фрагмента, который будет отображаться на экране при выборе определенной вкладки:

    <?xml version="1.0" encoding="utf-8"?>
    <TextView 
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_gravity="center" />
    

    В PageFragment.javaразделе определение логики инфляции для фрагмента содержимого вкладки:

    // In this case, the fragment displays simple text based on the page
    public class PageFragment extends Fragment {
        public static final String ARG_PAGE = "ARG_PAGE";
    
        private int mPage;
    
        public static PageFragment newInstance(int page) {
            Bundle args = new Bundle();
            args.putInt(ARG_PAGE, page);
            PageFragment fragment = new PageFragment();
            fragment.setArguments(args);
            return fragment;
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mPage = getArguments().getInt(ARG_PAGE);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_page, container, false);
            TextView textView = (TextView) view;
            textView.setText("Fragment #" + mPage);
            return view;
        }
    }
    

    Следующее, что нужно сделать, это реализовать адаптер для вашего ViewPager, который контролирует порядок вкладок, заголовков и связанного с ними контента. Наиболее важными методами для реализации здесь являются getPageTitle(int position)то, что используется для получения заголовка для каждой вкладки и getItem(int position), который определяет фрагмент для каждой вкладки.

    public class SampleFragmentPagerAdapter extends FragmentPagerAdapter {
        final int PAGE_COUNT = 3;
        private String tabTitles[] = new String[] { "Tab1", "Tab2", "Tab3" };
        private Context context;
    
        public SampleFragmentPagerAdapter(FragmentManager fm, Context context) {
            super(fm);
            this.context = context;
        }
    
        @Override
        public int getCount() {
            return PAGE_COUNT;
        }
    
        @Override
        public Fragment getItem(int position) {
            return PageFragment.newInstance(position + 1);
        }
    
        @Override
        public CharSequence getPageTitle(int position) {
            // Generate title based on item position
            return tabTitles[position];
        }
    }
    

    Наконец, нам нужно прикрепить наш ViewPager к SampleFragmentPagerAdapter, а затем настроить скользящие вкладки с помощью двухэтапного процесса:

    В onCreate()методе действия найдите ViewPagerи подключите адаптер.
    Установите ViewPagerнаTabLayout, чтобы подключить пейджер с вкладками.

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Get the ViewPager and set it's PagerAdapter so that it can display items
            ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
            viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager(), 
                MainActivity.this));
    
            // Give the TabLayout the ViewPager
            TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
            tabLayout.setupWithViewPager(viewPager);
        }
    
    }
    

    Источник : https://guides.codepath.com/android/google-play-style-tabs-using-tablayout

  2. Используя addOnTabSelectedListenerкак так:

    tabLayout.addOnTabSelectedListener(new OnTabSelectedListener() {
        @Override
        public void onTabSelected(Tab tab) {
             switch(tab.getPosition()) {
                 case 0:
                    // ...
             }
        }
    }