在tablayout上设置onclick事件

我需要通过点击tab切换fragment。
我想在<com.google.android.material.tabs.TabLayout>或者<com.google.android.material.tabs.TabItem>标签上设置点击事件,但是会报错:Attempt to invoke virtual method 'void com.google.android.material.tabs.TabItem.setTag(java.lang.Object)' on a null object reference。或者无法运行。
不通过findViewById,有办法给tab设置点击事件吗,还是设置别的事件可以切换fragment

您可以使用TabLayout.addOnTabSelectedListener()方法,该方法允许您在TabLayout上添加侦听器,以便在选择某个标签时调用代码:

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
 { 
@Override public void onTabSelected(TabLayout.Tab tab) 
{ // Switch to the corresponding fragment }

@Override
public void onTabUnselected(TabLayout.Tab tab) {
    // Do nothing
}

@Override
public void onTabReselected(TabLayout.Tab tab) {
    // Do nothing
}
}


在布局文件中添加TabLayout和ViewPager:

<com.google.android.material.tabs.TabLayout
    android:id="@+id/tabLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabGravity="fill"
    app:tabMode="fixed">

    <com.google.android.material.tabs.TabItem
        android:id="@+id/tabItem1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Tab1" />

    <com.google.android.material.tabs.TabItem
        android:id="@+id/tabItem2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Tab2" />

</com.google.android.material.tabs.TabLayout>

<androidx.viewpager.widget.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />


在Activity或者Fragment中获取TabLayout和ViewPager,并设置TabLayout的addOnTabSelectedListener():

TabLayout tabLayout = findViewById(R.id.tabLayout);
ViewPager viewPager = findViewById(R.id.viewPager);

// 将ViewPager与TabLayout关联
viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
tabLayout.setupWithViewPager(viewPager);

// 设置Tab的点击事件
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        // 切换ViewPager的当前页
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {
    }
});


 
tabLayout.addOnTabSelectedListener(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) {
    }
});