当前位置: 首页 > 知识库问答 >
问题:

将图标设置为选项卡布局时应用程序崩溃

龙永福
2023-03-14

我正在Android中创建一个带有导航视图的tabLayout。我想将图标设置到选项卡布局的选项卡上。当我使用setIcon函数时,应用程序抛出一个空指针异常并崩溃。请帮帮我.

public class navHomeActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

private TabLayout tabLayout;
private ViewPager viewPager;
int icons[] = {
        R.drawable.icon1,
        R.drawable.icon2,
        R.drawable.icon3};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_nav_home);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    viewPager = (ViewPager) findViewById(R.id.homeViewPager);
    setupViewPager(viewPager);
    setupTabIcons();

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

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
}


private void setupTabIcons() {
    tabLayout.getTabAt(0).setIcon(icons[0]);
    tabLayout.getTabAt(1).setIcon(icons[1]);
    tabLayout.getTabAt(2).setIcon(icons[2]);
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFrag(new OneFragment(), "tab1");
    adapter.addFrag(new OneFragment(), "tab2");
    adapter.addFrag(new OneFragment(), "tab3");
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFrag(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);

    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}


@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    Fragment fragment = null;

    int id = item.getItemId();

    if (id == R.id.nav_home)
        {
            setTitle("Home");
        }
    else if (id == R.id.frag2)
        {

        }
    else if (id == R.id.frag3)
        {

        }
    else if (id == R.id.frag4)
        {

        }
    else if (id == R.id.frag5)
        {

        }
    else if (id == R.id.frag6)
        {

        }
    else if (id == R.id.frag7)
        {

        }
    else if (id == R.id.frag8)
        {

        }

    try {
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.homeContentLayout, fragment).commit();
    }catch (NullPointerException e){
        Log.d("Exception", e.toString());}


    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}  
}

LogCat:

在android.app.activityThread.-wrap11(activityThread.java)在android.app.activityThread$H.HandleMessage(activityThread.java:1354)在android.os.handler.dispatchMessage(handler.java:102)在android.os.looper.loop(looper.java:148)在android.app.activityThread.main(activityThread.java:5443)在java.lang.reflect.Method.invoke(原生方法)在

在com.android.internal.os.zygoteinit.main(zygoteinit.java:618)

共有1个答案

高恺
2023-03-14

在调用FindViewById()检索Tablayout或添加任何选项卡之前,您正在调用SetupTabicons()。尝试更改:

setupTabIcons();

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

致:

tabLayout = (TabLayout) findViewById(R.id.tabHomeLayout);
tabLayout.setupWithViewPager(viewPager);
setupTabIcons();
 类似资料:
  • 问题内容: 预期结果 单击切换按钮将显示菜单,并向右滑动内容视图。动画结束后,内容视图的布局参数将更新到最终位置。 问题 更新内容视图的最终位置时,该语句导致崩溃。错误消息是 源代码 问题答案: PARAMS应该RESP添加到您的父视图,假设你有作为父视图然后,必须使用。 说明 : 举个例子,并且,它们是不同的独立的类。他们存储有关子视图的不同其他信息。 可以将权重值与每个视图相关联,而不能。 可

  • 因此,我的应用程序不断崩溃,我正在开发一个聊天应用程序,当我运行该应用程序并尝试访问profile选项卡时,logcat会崩溃。 当它运行的应用程序它的罚款,但只要我点击配置文件选项卡它崩溃它是罚款在第一,但一旦我添加更多的代码到配置文件活动它不断崩溃,但我需要的代码或它的变种 我是android studio的新手,欢迎您的帮助。 非常感谢。 这是logcat错误: 以下是简介活动:

  • 作为快速可视化,这是我的布局: 当我为Coordinator布局设置一个ID()时,应用程序在启动时崩溃,但是删除ID可以让它正常运行。怎么回事?为什么为根视图设置ID会导致应用程序崩溃? 我见过有人用这个findViewById(android.R.id.content)来获取根视图;这是获得rootview的唯一方法吗? 崩溃日志 07-06 18:30:42.253 9385-9385/me

  • 问题内容: 我有一个带有3个不同内容选项卡的Bootstrap“选项卡”导航。除了我要从选项卡导航之外链接到其中一个选项卡之外,它的工作原理都是完美的。这意味着当某人单击选项卡窗口外部的链接时,应将其设置为“活动”该选项卡并显示其内容。 现在,它正确显示了该选项卡的内容,但是该选项卡未设置为“活动”。我如何实现这一点,以使其像有人单击一样“活跃”? 这是代码: 非常感谢您的帮助或提示:) 问题答案

  • 如何设置电子应用程序的应用程序图标? 我正在尝试