在 tabLayout 中设置 Icon 会抛出空指针异常
Setting Icon in tabLayout throws nullpointer exception
我正在创建一个像 instagram 这样的简单项目,它在主 activity 中有 3 个选项卡。我想在 tablayout 选项卡中添加带有文本的图标,但它会抛出异常。
我的 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];
}
}
}
此代码抛出空指针异常我该怎么办?
异常文本
09-29 14:33:53.004 29528-29528/com.example.eyepatch.shutter
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.eyepatch.shutter, PID: 29528
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.eyepatch.shutter/com.example.eyepatch.shutter.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method
'android.support.design.widget.TabLayout$Tab
android.support.design.widget.TabLayout$Tab.setIcon(android.graphics.drawable.Drawable)'
on a null object reference
at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434)
at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
at android.app.ActivityThread.access0(ActivityThread.java:157)
at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
at android.os.Handler.dispatchMessage(Handler.java:102)
at 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)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual
method 'android.support.design.widget.TabLayout$Tab
android.support.design.widget.TabLayout$Tab.setIcon(android.graphics.drawable.Drawable)'
on a null object reference
at
com.example.eyepatch.shutter.MainActivity.onCreate(MainActivity.java:33)
at android.app.Activity.performCreate(Activity.java:6272)
at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
at android.app.ActivityThread.access0(ActivityThread.java:157)
at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
at android.os.Handler.dispatchMessage(Handler.java:102)
at 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)
您应该先将适配器设置为 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));
检查此 link。它对我帮助很大,我认为这就是您所需要的:
Android Material Design working with Tabs
https://www.androidhive.info/2015/09/android-material-design-working-with-tabs/
我正在创建一个像 instagram 这样的简单项目,它在主 activity 中有 3 个选项卡。我想在 tablayout 选项卡中添加带有文本的图标,但它会抛出异常。
我的 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];
}
}
}
此代码抛出空指针异常我该怎么办?
异常文本
09-29 14:33:53.004 29528-29528/com.example.eyepatch.shutter E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.eyepatch.shutter, PID: 29528
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.eyepatch.shutter/com.example.eyepatch.shutter.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.design.widget.TabLayout$Tab android.support.design.widget.TabLayout$Tab.setIcon(android.graphics.drawable.Drawable)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) at android.app.ActivityThread.access0(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
at android.os.Handler.dispatchMessage(Handler.java:102)
at 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)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.design.widget.TabLayout$Tab android.support.design.widget.TabLayout$Tab.setIcon(android.graphics.drawable.Drawable)' on a null object reference
at com.example.eyepatch.shutter.MainActivity.onCreate(MainActivity.java:33) at android.app.Activity.performCreate(Activity.java:6272)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) at android.app.ActivityThread.access0(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) at android.os.Handler.dispatchMessage(Handler.java:102)
at 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)
您应该先将适配器设置为 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));
检查此 link。它对我帮助很大,我认为这就是您所需要的:
Android Material Design working with Tabs
https://www.androidhive.info/2015/09/android-material-design-working-with-tabs/