以编程方式选择选项卡项

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 的适配器。

我的建议是,在您确定自己在做什么之前,请停止使用此应用程序。您发布的代码片段中存在不止一个明显的错误