我需要通过点击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) {
}
});