【问题标题】:Getting a null pointer exception when setting up the tab icons设置选项卡图标时出现空指针异常
【发布时间】:2018-04-04 14:43:21
【问题描述】:

我正在尝试在选项卡中设置图标,但我不断收到空指针异常。我无法理解为什么会发生这种情况?

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d(TAG, "onCreate: starting");
    setupNavigationView();
    setupViewPager();

}

//Responsible for adding the 3 tabs:camera,main,message
private void setupViewPager(){
    SectionPagerAdapter sectionPagerAdapter = new SectionPagerAdapter(getSupportFragmentManager());
    sectionPagerAdapter.addFragment(new CameraFragment());
    sectionPagerAdapter.addFragment(new MainFragment());
    sectionPagerAdapter.addFragment(new MessagesFragment());
    ViewPager viewPager = findViewById(R.id.container);
    viewPager.setAdapter(sectionPagerAdapter);

    TabLayout layout = findViewById(R.id.tabs);
    layout.setupWithViewPager(viewPager);

    layout.getTabAt(0).setIcon(R.drawable.ic_camera);
    layout.getTabAt(1).setIcon(R.drawable.ic_instagram);
    layout.getTabAt(2).setIcon(R.drawable.ic_action_name);


}

错误:

  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
                                                                                Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.design.widget.TabLayout$Tab android.support.design.widget.TabLayout$Tab.setIcon(int)' on a null object reference
                                                                                   at android.vishal.instagramclone.MainActivity.MainActivity.setupViewPager(MainActivity.java:47)
                                                                                   at android.vishal.instagramclone.MainActivity.MainActivity.onCreate(MainActivity.java:31)

【问题讨论】:

  • 是的,我做对了。谢谢
  • 是的,我做到了,这是此答案中的第二个解决方案。

标签: android android-tabs


【解决方案1】:

您遇到此问题是因为您尚未添加标签并尝试设置图标

//Add tabs icon with setIcon() or simple text with .setText()
 tabLayout.addTab(tabLayout.newTab().setIcon(R.mipmap.ic_home));
 tabLayout.addTab(tabLayout.newTab().setIcon(R.mipmap.ic_profile));
 tabLayout.addTab(tabLayout.newTab().setIcon(R.mipmap.ic_settings));

更多详情请查看以下链接

https://gist.github.com/faizsiddiqui/9af9cea9051335e1ad3f

【讨论】:

    【解决方案2】:

    要获取视图,请使用:

    layout.getChildAt(0).getChildAt(0).setIcon(R.drawable.ic_camera);
    layout.getChildAt(0).getChildAt(1).setIcon(R.drawable.ic_instagram);
    

    layout.getChildAt(0).findViewById(R.id.your_camera_tab_id).setIcon(R.drawable.ic_camera);
    layout.getChildAt(0).findViewById(R.id.your_instagram_tab_id).setIcon(R.drawable.ic_instagram);
    

    layout.getChildAt(0) 返回包含选项卡的 ViewGroup。

    【讨论】:

      猜你喜欢
      • 2013-09-02
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多