以编程方式选择选项卡项
Tab Item Selection Programmatically
我正在尝试以编程方式为我的 tabLayout
设置选项卡选择。我一直收到 null pointer
。
firebaseFirestore.collection("Categories")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getString("title") + " => " + document.getData());
tabLayout.addTab(tabLayout.newTab().setText(document.getString("title")));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.getTabAt(5).select();
final CategoriesPagerAdapter categoriesPagerAdapter = new CategoriesPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(categoriesPagerAdapter);
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
为什么 getTabAt(5).select
一直返回 null?
问题是您正在尝试 select 尚未添加到 TabLayout
的选项卡。你叫这个...
tabLayout.getTabAt(5).select();
在此之后...
tabLayout.addTab(tabLayout.newTab().setText(document.getString("title")));
尝试将对 select
的调用移出 for
循环。
另外,请注意文档明确说明了有关 select
方法的以下内容...
Select this tab. Only valid if the tab has been added to the action bar.
所以,如果 TabLayout
还没有被添加到操作栏中,它将什么都不做。
另一个问题是您在 for
循环的每次迭代中重新创建和设置 viewpager 的适配器。
我的建议是,在您确定自己在做什么之前,请停止使用此应用程序。您发布的代码片段中存在不止一个明显的错误
我正在尝试以编程方式为我的 tabLayout
设置选项卡选择。我一直收到 null pointer
。
firebaseFirestore.collection("Categories")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getString("title") + " => " + document.getData());
tabLayout.addTab(tabLayout.newTab().setText(document.getString("title")));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.getTabAt(5).select();
final CategoriesPagerAdapter categoriesPagerAdapter = new CategoriesPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(categoriesPagerAdapter);
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
为什么 getTabAt(5).select
一直返回 null?
问题是您正在尝试 select 尚未添加到 TabLayout
的选项卡。你叫这个...
tabLayout.getTabAt(5).select();
在此之后...
tabLayout.addTab(tabLayout.newTab().setText(document.getString("title")));
尝试将对 select
的调用移出 for
循环。
另外,请注意文档明确说明了有关 select
方法的以下内容...
Select this tab. Only valid if the tab has been added to the action bar.
所以,如果 TabLayout
还没有被添加到操作栏中,它将什么都不做。
另一个问题是您在 for
循环的每次迭代中重新创建和设置 viewpager 的适配器。
我的建议是,在您确定自己在做什么之前,请停止使用此应用程序。您发布的代码片段中存在不止一个明显的错误