当我在片段之间滑动时,tabindicator不会从tablayout中的一个滑动到另一个选项卡。突出显示的字体也不会改变

问题描述:

public class LoginRegister extends AppCompatActivity implements SignUpFragment.OnFragmentInteractionListener ,SignInFragment.OnFragmentInteractionListener{ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login_register); 
    final TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout_signup); 
    tabLayout.addTab(tabLayout.newTab().setText("Sign Up")); 
    tabLayout.addTab(tabLayout.newTab().setText("Sign in")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);   
    final ViewPager pager =(ViewPager) findViewById(R.id.loginpager); 
    final SigninPagerAdapter adapter = new SigninPagerAdapter(getSupportFragmentManager(),tabLayout.getTabCount()); 
    pager.setAdapter(adapter); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      pager.setCurrentItem(tab.getPosition()); 
     } 
     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
} 
     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
     } 
    }); 

当我滑过片段时,选项卡的高光不会改变,但它在我触摸选项卡时正常工作。当我触摸它们时,选项卡指示器从左向右滑动标签的右侧和字体颜色也显示为突出显示。 我认为问题出在这段代码当我在片段之间滑动时,tabindicator不会从tablayout中的一个滑动到另一个选项卡。突出显示的字体也不会改变

pager.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) { 

     } 
    }); 

} 


@Override 
public void onFragmentInteraction(Uri uri) { 

} 
} 

我应该怎么做,以突出显示当前选项卡...

我找到了我的解决方案。

tabLayout.setupWithViewPager(pager); 

这种方法很容易设置。

你不应该addTab()在你的tablayout,因为你已经设置了一个鉴于寻呼机适配器

执行以下操作,它应该正常工作

public class LoginRegister extends AppCompatActivity implements SignUpFragment.OnFragmentInteractionListener ,SignInFragment.OnFragmentInteractionListener { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login_register); 

    final SigninPagerAdapter adapter = new SigninPagerAdapter(getSupportFragmentManager()); 

    final ViewPager pager = (ViewPager) findViewById(R.id.loginpager); 
    pager.setAdapter(adapter); 

    final TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout_signup); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    tabLayout.setupWithViewPager(pager); 

    } 
} 

而且SignInPagerAdapter

public class SigninPagerAdapter extends FragmentStatePagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
     case 0: 
      return SingnUpFragment.newInstance() 
     case 1: 
      return SignInFragment.newInstance() 
     default: 
      return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     //return the number of tabs you want in your tabLayout 
     return 2; 
    } 


    @Override 
    public CharSequence getPageTitle(int position) { 
     //this is where you set the titles 
     switch(position) { 
      case 0: 
       return "Sign Up"; 
      case 1: 
       return "Sign In"; 
     } 
     return null; 
    } 
+0

当我删除addTab()时,标签的标题也被删除。 –

+0

看看适配器代码。您是否在适配器中重写getPageTitle?这就是你设置标题的地方 – kidustiliksew

+0

是的,getpagetitle在那里被覆盖,但是标题仍然不可见 –

更改选定和未选定选项卡的颜色。在您的LoginRegister.java文件中使用以下代码:

//tabLayout.setTabTextColors(unselectedTabColor, selectedTabColor) 
     tabLayout.setTabTextColors(Color.parseColor("#627179"), Color.parseColor("#BF4A32")); 

尝试在YOUT代码补充一点:

mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 

      //THIS!! 
      if (mViewPager != null) { 
       mViewPager.setCurrentItem(tab.getPosition()); 

      } 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

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

     } 
    }); 

它解决了我的问题。

只是一个额外的说明。

最好的事情是打电话tabLayout.setupWithViewPager(viewPager)最后。

至少,不叫viewPager.clearOnPageChangeListeners()viewPager.setOnPageChangeListener()你叫tabLayout.setupWithViewPager(viewPager)之后,因为这将删除当ViewPager滚动是TabLayout使用监听器。