2016-05-24 7 views
1

Ich versuche, Tabsymbol hervorzuheben, wenn ViewPager ausgewählt oder übersprungen ist. Dazu benutze ich 'tabLayout.setOnTabSelectedListener()'. Aber es wird nicht hervorgehoben, wenn ich den Tab wische, aber wenn ich die Tabulatortaste wähle, werden alle Arbeiten perfekt und der Tab wird hervorgehoben. Kann sein, dass es mit Gradle Version zusammenhängt. Ich benutze 'classpath 'com.android.tools.build:gradle:2.1.0''. Dies ist Aktivität:tabLayout.setOnTabSelectedListener beim Swiping nicht aufgerufen

private int[] tabIcons = { 
     R.drawable.tab_icon_home, 
     R.drawable.tab_icon_cart2, 
     R.drawable.tab_icon_aksia, 
     R.drawable.tab_icon_menu 
}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_icon_tabs); 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    toolbar.setTitleTextColor(Color.WHITE); 
    setSupportActionBar(toolbar); 

    frameLayout = (FrameLayout) findViewById(R.id.frameLayout); 

    adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(pageChangeListener); 
    viewPager.setOffscreenPageLimit(10); 
    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
    setupTabIcons(); 

} 


private OnPageChangeListener pageChangeListener = new OnPageChangeListener() { 

    int currentPosition = 0; 

    @Override 
    public void onPageSelected(int newPosition) { 

      FragmentLifecycle fragmentToHide = (FragmentLifecycle) adapter.getItem(currentPosition); 
      fragmentToHide.onPauseFragment(); 

      FragmentLifecycle fragmentToShow = (FragmentLifecycle) adapter.getItem(newPosition); 
      fragmentToShow.onResumeFragment(); 

      currentPosition = newPosition; 
      adapter.notifyDataSetChanged(); 

    } 

    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { 

    } 

    public void onPageScrollStateChanged(int arg0) { } 
}; 

private void setupTabIcons() { 


    tabLayout.getTabAt(0).setIcon(tabIcons[0]); 
    tabLayout.getTabAt(1).setIcon(tabIcons[1]); 
    tabLayout.getTabAt(2).setIcon(tabIcons[2]); 
    tabLayout.getTabAt(3).setIcon(tabIcons[3]); 

    tabLayout.getTabAt(0).getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY); 
    tabLayout.getTabAt(1).getIcon().setColorFilter(Color.parseColor("#81C784"), PorterDuff.Mode.SRC_IN); 
    tabLayout.getTabAt(2).getIcon().setColorFilter(Color.parseColor("#81C784"), PorterDuff.Mode.SRC_IN); 
    tabLayout.getTabAt(3).getIcon().setColorFilter(Color.parseColor("#81C784"), PorterDuff.Mode.SRC_IN); 



    tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      super.onTabSelected(tab); 

       tab.getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY); 


     } 

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

      tab.getIcon().setColorFilter(Color.parseColor("#81C784"), PorterDuff.Mode.MULTIPLY); 
     } 

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

     } 
    }); 


} 
+0

Schreiben Sie Ihren Code für Tab-Highlight in onPageSelected lassen Sie mich wissen, wenn es nicht funktioniert – Nisarg

+0

@Nisarg es ist Arbeit in onPageSelected(), aber wie kann ich onPageUnSelected() implementieren? – eluuu

+0

Sie nicht für unselect nur implementieren müssen diese Position nutzen und Code entsprechend – Nisarg

Antwort

0

Wenn Sie setupWithViewPager aufrufen, wird diese intern setOnTabSelectedListener(new ViewPagerOnTabSelectedListener(viewPager)); nennen, überschreiben Ihre OnTabSelectedListener.

Sie TabLayout.ViewPagerOnTabSelectedListener implementiert haben, und dann onTabSelected() außer Kraft gesetzt und rufen setOnTabSelectedListener() nach setupWithViewPager():

dies richtig ist und es funktioniert gut, wenn Tab geklickt haben, Sie sagen, wenn Sie die Seite scrollen, es nicht funktioniert . Werfen Sie einen Blick auf Ihre onPageSelected() von OnPageChangeListener(). Weil diese Methode aufgerufen wird, wenn eine bestimmte Seite ausgewählt wurde.

0

auf diese Weise versuchen ...

tabLayout = ((TabLayout) findViewById(R.id.tabs)); 
adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
viewPager = (ViewPager) findViewById(R.id.viewpager); 
viewPager.setAdapter(adapter); 
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(
         tabLayout)); 
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      public void onTabReselected(TabLayout.Tab paramAnonymousTab) { 
      } 

      public void onTabSelected(TabLayout.Tab paramAnonymousTab) { 
       viewPager.setCurrentItem(paramAnonymousTab.getPosition()); 
       tab.getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY); 
      } 

      public void onTabUnselected(TabLayout.Tab paramAnonymousTab) { 
       tab.getIcon().setColorFilter(Color.parseColor("#81C784"), PorterDuff.Mode.MULTIPLY); 
      } 
}); 

tabLayout.getTabAt(0).setIcon(tabIcons[0]); 
tabLayout.getTabAt(1).setIcon(tabIcons[1]); 
tabLayout.getTabAt(2).setIcon(tabIcons[2]); 
tabLayout.getTabAt(3).setIcon(tabIcons[3]); 

tabLayout.getTabAt(0).getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY); 
tabLayout.getTabAt(1).getIcon().setColorFilter(Color.parseColor("#81C784"), PorterDuff.Mode.SRC_IN); 
tabLayout.getTabAt(2).getIcon().setColorFilter(Color.parseColor("#81C784"), PorterDuff.Mode.SRC_IN); 
tabLayout.getTabAt(3).getIcon().setColorFilter(Color.parseColor("#81C784"), PorterDuff.Mode.SRC_IN); 

viewPager.setOffscreenPageLimit(4); 

Glücklich Codierung.

+0

es funktioniert nicht – eluuu

+0

mit welchem ​​Problem Sie konfrontiert sind? –

+0

Ich tat wie du sagtest aber nichts passierte. Das Problem bleibt – eluuu

1

fand ich Lösung, in gradle I

verwendet
dependencies { 
    compile 'com.android.support:appcompat-v7:23.0.0' 
    compile 'com.android.support:design:23.0.0' } 

Und ich von 23.0.0 auf 23.0.1 ändern sowohl in appcompat-v7 und Design. Jetzt arbeiten alle für mich.

+0

mir verzeihen Sie auf unterschiedliche Weise geführt wird, hat dies nicht wissen, neu zu wissen :) – Nisarg

+0

@Nisarg vielen Dank für Ihre Zeit – eluuu