首页 文章

tabLayout中的设置图标会抛出nullpointer异常

提问于
浏览
0

我正在创建一个像instagram这样的简单项目,它在主要活动中有3个选项卡 . 我想在tablayout选项卡中添加带有文本的图标,但它会抛出异常 .

My MainActivity

public class MainActivity extends AppCompatActivity {
TabLayout tabLayout;
ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    viewPager = (ViewPager) findViewById(R.id.viewPager);
    tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    tabLayout.setupWithViewPager(viewPager);

    TabLayout.Tab tab = tabLayout.getTabAt(0);

    tab.setIcon(new IconicsDrawable(this).icon(FontAwesome.Icon.faw_home));


    viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(), getApplicationContext()));


}

private class CustomAdapter extends FragmentPagerAdapter {
    private String items[] = {"Home", "Upload", "Profile"};

    public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext) {
        super(supportFragmentManager);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new fragment1();
            case 1:
                return new fragment2();
            case 2:
                return new fragment3();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return items.length;
    }


    @Override
    public CharSequence getPageTitle(int position) {
        return items[position];
    }
}
  }

此代码抛出nullpointer异常我该怎么办?

Exception Text

09-29 14:33:53.004 29528-29528 / com.example.eyepatch.shutter E / AndroidRuntime:FATAL EXCEPTION:main进程:com.example.eyepatch.shutter,PID:29528 java.lang.RuntimeException:无法启动activity ComponentInfo {com.example.eyepatch.shutter / com.example.eyepatch.shutter.MainActivity}:java.lang.NullPointerException:尝试调用虚方法'android.support.design.widget.TabLayout $ Tab android.support.design .widget.TabLayout $ Tab.setIcon(android.graphics.drawable.Drawable)'在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434)上的空对象引用上:2494)在Android.app.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread.access $ 900(ActivityThread.java:157)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1356) )在android.app.Looper.loop(Looper.java:148)的android.app.ActivityThread.main(ActivityThread.java:5530)java.lang.reflect.Method.i在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:733)的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623)中的nvoke(Native Method)引起:java . lang.NullPointerException:尝试在null对象引用上调用虚方法'android.support.design.widget.TabLayout $ Tab android.support.design.widget.TabLayout $ Tab.setIcon(android.graphics.drawable.Drawable)' android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)在android.app.Activity.performCreate(Activity.java:6272)上的com.example.eyepatch.shutter.MainActivity.onCreate(MainActivity.java:33) Android.app.ActivityThread上的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)android.app.ActivityThread.access $ 900(ActivityThread.java:157)的.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387) $ H.handleMessage(ActivityThread.java:1356)在android.os.Handler.dispatchMessage(Handler.java:102)的android.os.Looper.loop(Looper . java:148)at android.app.ActivityThread.main(ActivityThread.java:5530)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit . java:733)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623)

2 回答

  • 0

    查看此链接 . 它帮助了我很多,我认为这是你需要的:

    Android Material Design使用Tabs

    https://www.androidhive.info/2015/09/android-material-design-working-with-tabs/

  • 2

    You are supposed to first set the adapter to viewpager

    重新安排以下行:

    tabLayout.setupWithViewPager(viewPager);
    TabLayout.Tab tab = tabLayout.getTabAt(0);
    tab.setIcon(new IconicsDrawable(this).icon(FontAwesome.Icon.faw_home));
    viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(), getApplicationContext()));
    

    如下所示:

    viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(), getApplicationContext()));
    tabLayout.setupWithViewPager(viewPager);
    TabLayout.Tab tab = tabLayout.getTabAt(0);
    tab.setIcon(new IconicsDrawable(this).icon(FontAwesome.Icon.faw_home));
    

相关问题