iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Mobile Development

Android Studio開發系列 第 21

【DAY 21】元件應用:tablayout-1-tablayout與viewPager2介紹

  • 分享至 

  • xImage
  •  

今天要介紹的是tablayout與viewPager2這兩個元件,這兩個元件大家肯定都不陌生,我們來看看它們的實際功能:

沒錯,就是這種透過滑動切換分頁的原件,也可以透過點擊上方的tab做切換,它與使用者的互動性更高,也較為生活化,下面我們就來看看如何實作一個基礎的滑動分頁。

首先,我們在主程式的layout拉取出一個linearlayout,裡面再套入一個tablayout元件及一個viewPager2元件,以上下的方式排列。

viewPager2就是待會要讓各分頁顯示的切換分頁,這樣主程式的layout就完成了。


接著,我們創建出想要的分頁數的fragment,這裡我們以3個為例,所以創建3個空白的fragment,將名字取為FragmentA、FragmentB、FragmentC:


再來,我們在主程式內加入適配器Adapter與viewPager2互相連接的程式,大概長這樣:
MainActivity:

public class MainActivity extends AppCompatActivity {

    //定義變數
    private TabLayout tl;
    private ViewPager2 vp2;
    //定義tab的名字
    private String[] tab_title = {"FragmentA","FragmentB","FragmentC"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //綁定元件和變數
        tl=findViewById(R.id.tabLayout);
        vp2=findViewById(R.id.viewPager2);

        //設定適配器adapter和viewPager2,將兩者互相連接
        vp2.setAdapter(new Adapter(getSupportFragmentManager(),getLifecycle()));

        new TabLayoutMediator(tl, vp2,true, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                vp2.setCurrentItem(tab.getPosition());
            }
        }).attach();

        //將tab的名稱利用迴圈放入TabLayout
        for(int i = 0 ; i < tl.getTabCount() ; i++){
            tl.getTabAt(i).setText(tab_title[i]);
        }
    }
}

這樣主程式的部分就完成了,我們還需要一個適配器adapter,新增一個class叫Adapter,讓我們來看看adapter的部分:
Adapter:

public class Adapter extends FragmentStateAdapter {

    //定義分頁的名稱
    FragmentA fragment_a;
    FragmentB fragment_b;
    FragmentC fragment_c;
    public Adapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }

    //根據索引值position回傳滑動到的分頁
    @NonNull
    @Override
    public Fragment createFragment(int position) {
        switch (position) {
            case 0:
                fragment_a = new FragmentA();
                return fragment_a;
            case 1:
                fragment_b = new FragmentB();
                return fragment_b;
            default:
                fragment_c = new FragmentC();
                return fragment_c;
        }
    }

    //回傳tab的數量
    @Override
    public int getItemCount(){
        return 3;
    }
}

將上面都設定完成後,可以試著啟動模擬看看是否達到如預期的功能。

今天的tablayout與viewPager2元件就介紹到這裡,下一篇我們來看看更多關於tablayout中tab的功能~~


上一篇
【DAY 20】元件介紹:SharedPreferences
下一篇
【DAY 22】元件應用:tablayout-2-tab的樣式
系列文
Android Studio開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言