我正在尝试以编程方式为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?
答案 0 :(得分:0)
问题是您试图选择一个尚未添加到TabLayout
的选项卡。你叫这个...
tabLayout.getTabAt(5).select();
之后...
tabLayout.addTab(tabLayout.newTab().setText(document.getString("title")));
尝试将呼叫移至select
循环之外的for
。
另外,请注意,文档中明确说明了有关select
方法的以下内容...
选择此选项卡。仅在选项卡已添加到操作栏中时有效。
因此,如果未将TabLayout
添加到操作栏中,它将什么都不做。
另一个问题是,您正在for
循环的每个迭代中重新创建并设置viewpager的适配器。
我的建议,请在确定您要做什么之前停止使用此应用程序。您发布的代码段中有多个明显的错误