简体   繁体   English

无法为tabLayout添加标签

[英]cannot add tab for tabLayout

I cannot add new tab to tabLayout. 我无法将新标签添加到tabLayout。

XML file XML文件

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

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

MainActivity.java MainActivity.java

package com.dailam103.messagetimer;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.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) {
        }
    });

}
}

Error is at 错误在

tabLayout.addTab(tabLayout.newTab().setTag(1).setText("Tab 1")); tabLayout.addTab(tabLayout.newTab()。setTag(1).setText(“ Tab 1”));

Please why i cannot add tab to tabLayout? 请为什么我不能将tab添加到tabLayout?

You need not to code long like this. 您无需像这样长时间编码。

 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) {
        }
    });

Just add tabLayout.setupWithViewPager(viewPager); 只需添加tabLayout.setupWithViewPager(viewPager);

  • or code that will be useful for setting tablayout from anywhere. 或对从任何地方设置布局都有用的代码。

     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; } } 
  • My all fragments extends BaseFragment . 我的所有片段都扩展了BaseFragment If you need tablayout in activity just replace BaseFragment with your BaseActivity class. 如果您需要在活动中进行tablayout ,只需将BaseFragment替换为BaseActivity类。

     private TabLayout tabLayout; private ViewPager viewPagerImage; tabLayout = (TabLayout) fragmentView.findViewById(R.id.tabLayoutDefault); viewPagerImage = (ViewPager) fragmentView.findViewById(R.id.homeViewPager); 
  • Write this code in your BaseFragment OR BaseActivity class. 在您的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(); } } 
  • and use like this easily 像这样容易使用

      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) { } }); } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM