【问题标题】:How to invoke virtual method 'void android.view.View.setEnabled(boolean)' on a null object reference如何在空对象引用上调用虚拟方法“void android.view.View.setEnabled(boolean)”
【发布时间】:2017-04-13 02:01:43
【问题描述】:

我需要禁用选项卡布局中的特定选项卡,但应用程序崩溃了。

public void onTabSelected(TabLayout.Tab tab) {
    switch (tab.getPosition()){
        case 0: tabLayout.getChildAt(0).setEnabled(true);
                viewPager.setCurrentItem(tab.getPosition());
        case 2: tabLayout.getChildAt(2).setEnabled(true);
                viewPager.setCurrentItem(tab.getPosition());
    }
}

【问题讨论】:

  • 您的switch 语句在cases 之后缺少break
  • 我尝试使用 break 语句,但它不起作用
  • 请发布错误消息和重现问题所需的任何其他代码。另请参阅minimal reproducible example
  • 尝试在空对象引用上调用虚拟方法“void android.view.View.setEnabled(boolean)”
  • 尝试在空对象引用上调用虚拟方法“void android.view.View.setEnabled(boolean)”

标签: android boolean android-tablayout


【解决方案1】:

在我看来,您只是缺少break 语句。

public void onTabSelected(TabLayout.Tab tab) {
    switch (tab.getPosition()){
        case 0: tabLayout.getChildAt(0).setEnabled(true);
                viewPager.setCurrentItem(tab.getPosition());
                break;
        case 2: tabLayout.getChildAt(2).setEnabled(true);
                viewPager.setCurrentItem(tab.getPosition());
                break;
    }
}

错误似乎是0 的情况失败,尝试tabLayout.getChildAt(2),这是一个空对象引用。

【讨论】:

  • 我也尝试过使用 break 语句,但显示错误
  • 尝试在空对象引用上调用虚拟方法“void android.view.View.setEnabled(boolean)”
  • 很可能,tabLayout 的第三个孩子实际上并不是第三个标签。您是否确认删除案例 2 后不会出现问题?
  • public void onTabSelected(TabLayout.Tab tab) { switch (tab.getPosition()){ case 0: tabLayout.getChildAt(0).setEnabled(true); viewPager.setCurrentItem(tab.getPosition());休息;案例1:viewPager.setCurrentItem(tab.getPosition());休息;案例2:tabLayout.getChildAt(2).setEnabled(true); viewPager.setCurrentItem(tab.getPosition());休息; } }
  • 出现同样的问题,我希望第一个选项卡和第三个选项卡应在第一次禁用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 2017-06-02
  • 1970-01-01
相关资源
最近更新 更多