2016-03-15 47 views
7
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) { 

} 
} 

我應該怎麼做,以突出顯示當前選項卡...

回答

12

我找到了我的解決方案。

tabLayout.setupWithViewPager(pager); 

這種方法很容易設置。

0

你不應該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在那裏被覆蓋,但是標題仍然不可見 –

0

更改選定和未選定選項卡的顏色。在您的LoginRegister.java文件中使用以下代碼:

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

嘗試在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) { 

     } 
    }); 

它解決了我的問題。

2

只是一個額外的說明。

最好的事情是打電話tabLayout.setupWithViewPager(viewPager)最後。

至少,不叫viewPager.clearOnPageChangeListeners()viewPager.setOnPageChangeListener()你叫tabLayout.setupWithViewPager(viewPager)之後,因爲這將刪除當ViewPager滾動是TabLayout使用監聽器。

相關問題