有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法为tabLayout添加选项卡

我无法向tabLayout添加新选项卡

XML文件

<RelativeLayout
安卓:id="@+id/main_layout"
xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
tools:context="com.dailam103.messagetimer.MainActivity">
<安卓.support.design.widget.TabLayout
    安卓:id="@+id/tabs"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    app:tabMode="fixed"
    app:tabGravity="fill"/>

<安卓.support.v4.view.ViewPager xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:id="@+id/pager"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent" >
</安卓.support.v4.view.ViewPager>
</RelativeLayout>

主要活动。爪哇

package com.dailam103.messagetimer;
import 安卓.os.Bundle;
import 安卓.support.v4.view.ViewPager;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.support.v7.widget.Toolbar;
import 安卓.support.design.widget.TabLayout;
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.addTab(tabLayout.newTab().setTag(1).setText("Tab 1"));
    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    final TabAdapter adapter = new TabAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }
        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }
        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });

}
}

错误在

表格布局。addTab(tabLayout.newTab()。设置标签(1)。setText(“表1”)

请问为什么我不能将tab添加到tabLayout


共 (1) 个答案

  1. # 1 楼答案

    您不需要像这样编写很长的代码

     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
    
            }
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
            }
        });
    

    只需添加tabLayout.setupWithViewPager(viewPager);

    • 或代码,将有助于从任何地方设置表格布局

      public class ViewPagerBean {
      ViewPager viewPager;
      TabLayout tabLayout;
      ArrayList<TabBean> tabTitleList;
      
      
      public ViewPager getViewPager() {
          return viewPager;
      }
      
      public void setViewPager(ViewPager viewPager) {
          this.viewPager = viewPager;
      }
      
      public TabLayout getTabLayout() {
          return tabLayout;
      }
      
      public void setTabLayout(TabLayout tabLayout) {
          this.tabLayout = tabLayout;
      }
      
      public ArrayList<TabBean> getTabTitleList() {
          return tabTitleList;
      }
      
      public void setTabTitleList(ArrayList<TabBean> tabTitleList) {
          this.tabTitleList = tabTitleList;
      }
      }
      
      public class TabBean {
      int icon;
      int title;
      BaseFragment baseFragment;
      
      public TabBean(int icon, int title, BaseFragment baseFragment) {
      this.icon = icon;
      this.title = title;
      this.baseFragment = baseFragment;
      }
      
      public int getIcon() {
      return icon;
      }
      
      public void setIcon(int icon) {
      this.icon = icon;
      }
      
      public int getTitle() {
      return title;
      }
      
      public void setTitle(int title) {
      this.title = title;
      }
      
      public BaseFragment getBaseFragment() {
      return baseFragment;
      }
      
      public void setBaseFragment(BaseFragment baseFragment) {
      this.baseFragment = baseFragment;
      }
      }
      
    • 我的所有片段都扩展了BaseFragment。如果在活动中需要tablayout,只需用BaseActivity类替换BaseFragment

      private TabLayout tabLayout;
      private ViewPager viewPagerImage;
      
      tabLayout = (TabLayout) fragmentView.findViewById(R.id.tabLayoutDefault);
      viewPagerImage = (ViewPager) fragmentView.findViewById(R.id.homeViewPager);
      
    • 在BaseFragment或BaseActivity类中编写此代码

      public void setViewPager(ViewPagerBean viewPagerBean) {
      ViewPager viewPager = viewPagerBean.getViewPager();
      TabLayout tabLayout = viewPagerBean.getTabLayout();
      FragmentManager fragmentManager = getFragmentManager();
      PagerAdapter adapterMyEvents = new PagerAdapter(fragmentManager, 
      viewPagerBean.getTabTitleList());
      viewPager.setAdapter(adapterMyEvents);
      tabLayout.setupWithViewPager(viewPager);
      viewPager.setCurrentItem(0);
      setCustomTabView(viewPagerBean);
      }
      
      private void setCustomTabView(ViewPagerBean pagerBean) {
      for (int i = 0; i < pagerBean.getTabLayout().getTabCount(); i++) {
      TabLayout.Tab tab = pagerBean.getTabLayout().getTabAt(i);
      LinearLayout linearLayout = (LinearLayout) LayoutInflater.from(getActivity()).inflate(R.layout.tab_custom_layout, pagerBean.getTabLayout(), false);
      TextView tabTextView = (TextView) linearLayout.findViewById(R.id.tab_title);
      ImageView ivTabLeftIcon = (ImageView) linearLayout.findViewById(R.id.ivTabLeftIcon);
      TabBean tabBean = pagerBean.getTabTitleList().get(i);
      
      if (tabBean.getTitle() != 0)
          tabTextView.setText(tabBean.getTitle());
      if (tabBean.getIcon() != 0)
          ivTabLeftIcon.setImageResource(tabBean.getIcon());
      if (tab != null) {
          tab.setCustomView(linearLayout);
      }
      }
      }
      
      
      
      
      private class PagerAdapter extends FragmentStatePagerAdapter {
      
      private ArrayList<TabBean> arrayList;
      
      public PagerAdapter(FragmentManager fm, ArrayList<TabBean> mTitles) {
      super(fm);
      this.arrayList = mTitles;
      }
      
      @Override
      public Fragment getItem(int position) {
      return arrayList.get(position).getBaseFragment();
      }
      
      
      @Override
      public CharSequence getPageTitle(int position) {
      return getString(arrayList.get(position).getTitle());
      }
      
      
      @Override
      public int getCount() {
      return arrayList.size();
      }
      }
      
    • 这样使用起来很容易

              public ArrayList<TabBean> getUserHomeTabFragmentList() {
              ArrayList<TabBean> arrayList = new ArrayList<>();
      
              FragmentHomeLunchList fragmentMenuLunch = new FragmentHomeLunchList();
              FragmentHomeDinnerList fragmentMenuDinner = new 
              FragmentHomeDinnerList();
      
              arrayList.add(new TabBean(R.drawable.ic_lunch, R.string.lunch, fragmentMenuLunch));
              arrayList.add(new TabBean(R.drawable.ic_dinner, R.string.dinner, fragmentMenuDinner));
      
              return arrayList;
              }
      
              private void setPagerAdapterWithTabLayout() {
              ArrayList<TabBean> tabsList = UtilProject.getInstance().getList();
              ViewPagerBean viewPagerBean = new ViewPagerBean();
              viewPagerBean.setTabLayout(tabLayout);
              viewPagerBean.setTabTitleList(tabsList);
              viewPagerBean.setViewPager(viewPagerBottom);
              setViewPager(viewPagerBean);
              viewPagerBottom.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
              @Override
              public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
      
              }
      
              @Override
              public void onPageSelected(int position) {
      
              }
      
              @Override
              public void onPageScrollStateChanged(int state) {
      
              }
              });
              }