2016-04-14 11 views
0

Ich verwende den viewPager mit android.support.design.widget.TabLayout. Mein xml istZurück-Taste und ViewPager

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/home_container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginBottom="@dimen/custom_tab_layout_height" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

     <!-- tabs --> 
     <android.support.design.widget.TabLayout 
      android:id="@+id/home_tabs" 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/custom_tab_layout_height" 
      android:layout_alignParentBottom="true" 
      app:tabGravity="fill" 
      android:background="@color/light_blue_low_opacity" 
      app:tabIndicatorHeight="0dp" 
      app:tabMode="fixed" 
      app:tabPaddingEnd="0dp" 
      app:tabPaddingStart="0dp" 
      app:tabSelectedTextColor="@color/light_green" 
      app:tabTextAppearance="@style/HomeTabsTextAppearance" 
      app:tabTextColor="@color/white" /> 

    </RelativeLayout> 

I viewPager wie unten

mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     mViewPager = (ViewPager) findViewById(R.id.home_container); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 
     mViewPager.setPagingEnabled(false); 
     mViewPager.setOffscreenPageLimit(5); 

     tabLayout = (TabLayout) findViewById(R.id.home_tabs); 
     tabLayout.setTabTextColors(ContextCompat.getColorStateList(this, R.color.color_home_tabs)); 
     tabLayout.setupWithViewPager(mViewPager); 

Mein tabListener

tabLayout.setOnTabSelectedListener(
       new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) { 
        @Override 
        public void onTabSelected(TabLayout.Tab tab) { 
         super.onTabSelected(tab); 
         int position = tab.getPosition(); 
        mViewPager.setCurrentItem(position); 

        String tab0TextUnSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.white) + "'> " + getResources().getString(R.string.home_tab1) + " </font>"; 
        String tab1TextUnSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.white) + "'> " + getResources().getString(R.string.home_tab2) + "</font>"; 
        String tab2TextUnSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.white) + "'> " + getResources().getString(R.string.home_tab3) + "</font>"; 
        String tab3TextUnSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.white) + "'> " + getResources().getString(R.string.home_tab4) + "</font>"; 
        String tab4TextUnSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.white) + "'> " + getResources().getString(R.string.home_tab5) + "</font>"; 


        String tab0TextSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.light_green) + "'> " + getResources().getString(R.string.home_tab1) + " </font>"; 
        String tab1TextSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.light_green) + "'> " + getResources().getString(R.string.home_tab2) + "</font>"; 
        String tab2TextSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.light_green) + "'> " + getResources().getString(R.string.home_tab3) + "</font>"; 
        String tab3TextSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.light_green) + "'> " + getResources().getString(R.string.home_tab4) + "</font>"; 
        String tab4TextSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.light_green) + "'> " + getResources().getString(R.string.home_tab5) + "</font>"; 

        TabLayout.Tab tab0 = tabLayout.getTabAt(0); 
        TabLayout.Tab tab1 = tabLayout.getTabAt(1); 
        TabLayout.Tab tab2 = tabLayout.getTabAt(2); 
        TabLayout.Tab tab3 = tabLayout.getTabAt(3); 
        TabLayout.Tab tab4 = tabLayout.getTabAt(4); 


        if (tab0 != null) { 
         tab0.setIcon(R.drawable.ic_home_profile_unselected); 
         tab0.setText(Html.fromHtml(tab0TextUnSelected)); 
        } 

        if (tab1 != null) { 
         tab1.setIcon(R.drawable.ic_home_rewards_unselected); 
         tab1.setText(Html.fromHtml(tab1TextUnSelected)); 
        } 

        if (tab2 != null) { 
         tab2.setIcon(R.drawable.ic_home_gallups_unselected); 
         tab2.setText(Html.fromHtml(tab2TextUnSelected)); 
        } 

        if (tab3 != null) { 
         tab3.setIcon(R.drawable.ic_home_statistics_unselected); 
         tab3.setText(Html.fromHtml(tab3TextUnSelected)); 
        } 

        if (tab4 != null) { 
         tab4.setIcon(R.drawable.ic_home_settings_unselected); 
         tab4.setText(Html.fromHtml(tab4TextUnSelected)); 
        } 

        if (position == 0) { 
         if (tab0 != null) { 
          tab0.setIcon(R.drawable.ic_home_profile_selected); 
          tab0.setText(Html.fromHtml(tab0TextSelected)); 
         } 
        } else if (position == 1) { 
         if (tab1 != null) { 
          tab1.setIcon(R.drawable.ic_home_rewards_selected); 
          tab1.setText(Html.fromHtml(tab1TextSelected)); 
         } 
        } else if (position == 2) { 
         if (tab2 != null) { 
          tab2.setIcon(R.drawable.ic_home_gallups_selected); 
          tab2.setText(Html.fromHtml(tab2TextSelected)); 
         } 
        } else if (position == 3) { 
         if (tab3 != null) { 
          tab3.setIcon(R.drawable.ic_home_statistics_selected); 
          tab3.setText(Html.fromHtml(tab3TextSelected)); 
         } 
        } else if (position == 4) { 
         if (tab4 != null) { 
          tab4.setIcon(R.drawable.ic_home_settings_selected); 
          tab4.setText(Html.fromHtml(tab4TextSelected)); 
         } 
        } 

       } 


      }); 

ist eingestellt habe ich überschreiben die onBackPressed Methode wie folgt

if (mViewPager.getCurrentItem() != 0) { 
    mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1, true); 
} 

Zusammengefasst Ich habe Tabs mit i Nachteile und Texte. Wenn eine Registerkarte ausgewählt ist, wird das Symbol geändert und der Text wird grün dargestellt. Wenn eine Registerkarte nicht ausgewählt ist, wird das Symbol geändert und der Text wird weiß dargestellt. Dies funktionierte gut, wenn der Benutzer auf Registerkarten klickt. Wenn der Benutzer auf die Zurück-Schaltfläche klickt, werden das Symbol und die Textfarbe korrekt geändert, aber für die vorherige Registerkarte bleibt der Text grün.

Antwort

3

dies versuchen,

@Override 
    public void onBackPressed() { 

     if (viewPager.getCurrentItem() != 0) { 
      viewPager.setCurrentItem(viewPager.getCurrentItem() - 1,false); 
     }else{ 
      finish(); 
     } 

    } 
+0

der zweite Parameter ist für die reibungslose Scroll .. Wie auch immer ich getestet und OMG es funktioniert – user4292106

+0

Ich kann nicht verstehen, warum ... – user4292106

+0

tut es hat wirklich für dich funktioniert? –

1

Nein sicher, ob ich das Problem richtig verstanden, aber versuchen

super.onBackPressed(); 

nach if Aussage zu nennen.

+0

Wenn ich super.onBackPressed() verwenden, es schließt meine Tätigkeit. – user4292106

0

Ihr ViewPager benötigt einen OnPageChangeListener, um die ausgewählte Registerkarte zu ändern.

mViewPager.setOnPageChangeListener(
     new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       // When swiping between pages, select the 
       // corresponding tab. 
       getActionBar().setSelectedNavigationItem(position); 
      } 
     }); 
... 
+0

setOnPageChangeListener ist veraltet – user4292106

+0

und auch meine App stürzt – user4292106

+0

verwenden Sie stattdessen AddOnPageChangeListener. –