以编程方式选择选项卡项目

时间:2019-04-30 08:44:29

标签: android tabs android-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?

1 个答案:

答案 0 :(得分:0)

问题是您试图选择一个尚未添加到TabLayout的选项卡。你叫这个...

tabLayout.getTabAt(5).select();

之后...

tabLayout.addTab(tabLayout.newTab().setText(document.getString("title")));

尝试将呼叫移至select循环之外的for。 另外,请注意,文档中明确说明了有关select方法的以下内容...

  

选择此选项卡。仅在选项卡已添加到操作栏中时有效。

因此,如果未将TabLayout添加到操作栏中,它将什么都不做。

另一个问题是,您正在for循环的每个迭代中重新创建并设置viewpager的适配器。

我的建议,请在确定您要做什么之前停止使用此应用程序。您发布的代码段中有多个明显的错误