2017-01-25 6 views
0

Ich muss den Hintergrund einer Registerkarte ändern, sobald ausgewählt, setzen Sie die nicht ausgewählte Registerkarte Hintergrundfarbe zurück auf die alte. Aus irgendeinem Grund ändert sich der Hintergrund nur, wenn ich nach IE auf eine andere Registerkarte klicke: Ich drücke auf die erste Registerkarte - richtige Farbe. Drücken Sie auf die zweite Registerkarte - die erste behält die markierte Farbe und die zweite Registerkarte wird ebenfalls hervorgehoben. Drücken Sie auf die dritte - die erste ist wieder normal, die zweite ist noch markiert und die dritte ist ebenfalls markiert.Android Registerkarte Hintergrund ändert sich nicht bei nicht ausgewählter

Hier ist meine TabLayout und einer meiner Registerkarten (Sie sind alle das gleiche Design)

<android.support.design.widget.TabLayout 
    android:id="@+id/tab_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#dbdbdb" 
    app:tabPaddingBottom="-1dp" 
    app:tabPaddingEnd="-1dp" 
    app:tabPaddingStart="-1dp" 
    app:tabPaddingTop="-1dp" 
    app:tabBackground="@drawable/tabs_background_colors" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentStart="true" > 
    android:background="@android:color/darker_gray" > 
    <android.support.design.widget.TabItem 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:icon="@drawable/reservation_w" 
     android:id="@+id/tab_reservation" 
     android:layout="@layout/tab_item_with_icon" 
     android:layout_weight="1" /> 

Die tab_item_with_icon

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center_vertical" 
android:background="#00000000"> 

<ImageView android:id="@android:id/icon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="5dp" 
    android:scaleType="fitCenter" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" /> 

und meine Reiter Zuhörer

((TabLayout)findViewById(R.id.tab_layout)).addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
      int icon = 0; 
      switch (tab.getPosition()) 
      { 
       case 0: 
        icon = R.drawable.reservation_w; 
        break; 
       case 1: 
        icon = R.drawable.offers_w; 
        break; 
       case 2: 
        icon = R.drawable.folio_w; 
        break; 
       case 3: 
        icon = R.drawable.location_w; 
        break; 
       case 4: 
        icon = R.drawable.contact_w; 
        break; 
      } 
      tab.setIcon(icon); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      int icon = 0; 
      switch (tab.getPosition()) 
      { 
       case 0: 
        icon = R.drawable.reservation_g; 
        break; 
       case 1: 
        icon = R.drawable.offers_g; 
        break; 
       case 2: 
        icon = R.drawable.folio_g; 
        break; 
       case 3: 
        icon = R.drawable.location_g; 
        break; 
       case 4: 
        icon = R.drawable.contact_g; 
        break; 
      } 
      tab.setIcon(icon); 

Darüber hinaus ist dies meine Zustände xml für die Registerkarte

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@color/tab_background_selected" android:state_selected="true"/> 
<item android:drawable="@color/tab_background_unselected" android:state_selected="false"/> 

Und here es, wie es in dem Fall sieht Ich war nicht so klar mit meiner Demonstration

Vielen Dank im Voraus :)

Antwort

1

Anscheinend sieht es aus wie ein Fehler ... aber das Symbol in der onTabUnselect Einstellung würde es machen, so dass der Hintergrund würde nicht ändern ... nicht sicher, warum und würde mich freuen, wenn jemand es erklären kann.

Wie auch immer, wenn Sie in dieses Durcheinander geraten, besteht die Lösung darin, die Symbole in onTabUnselect nicht zu ändern, sondern nur im Ereignis onTabSelect. Was ich tat, war die Position des nicht ausgewählten Tab in einen globalen int vom onTabUnselect

@Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      unselectedTabPosition = tab.getPosition(); 
     } 

speichern und dann die Symbole auf dem onTabSelect ändern -

wird die Zeit, die ich verschwendet speichern diese
@Override 
     public void onTabSelected(TabLayout.Tab tab) { 

      changeToGrayIcon(unselectedTabPosition); 

Hoffnung darauf für jemanden.

+0

Danke für den Austausch! – AndroidRuntimeException

0

Ihre erste XML enthält Fehler. Überprüfen Sie Android: Hintergrundeigenschaft. Führen Sie die Methode tab.setIcon (Symbol) im UI-Thread aus.

YourActivity.this.runOnUiThread(new Runnable() { 
    public void run() { 
     tab.setIcon(icon); 
    } 
}); 
+0

Danke für den Hintergrund Tipp, habe es nicht gesehen :) Aber immer noch, das Problem ist, dass mein Hintergrund sich nicht ändert, die Symbole ändern sich perfekt, ich ändere sie bereits auf dem Hauptfaden, soweit ich weiß. – Shai

Verwandte Themen