2017-05-28 3 views
0

Ich lerne gerade etwas Android und entwickle meine erste App. Ich benutze eine ViewPager, die eine Image enthält:Android ImageButton, bekomme ImageResource mit ViewPager Layout

<ImageButton 
     android:id="@+id/favourite_button" 
     android:layout_width="60dp" 
     android:layout_height="60dp" 
     android:layout_gravity="center" 
     android:background="@android:color/transparent" 
     android:onClick="onClickFav" 
     android:scaleType="fitCenter" 
     android:src="@drawable/heart" /> 

In meinem Adapter für den ViewPager habe ich versucht, onClick Methode folgen:

private boolean nofav = true; 

public void onClickFav(View v) { 
     ImageButton favouriteButton = (ImageButton) v; 

     if (nofav) { 
      favouriteButton.setImageResource(R.drawable.heart_red); 

      Toast.makeText(SuggestionActivity.this, "Woah, new favourite!", 
        Toast.LENGTH_SHORT).show(); 

      nofav = false; 
     } else { 
      favouriteButton.setImageResource(R.drawable.heart); 

      Toast.makeText(SuggestionActivity.this, "No favourite anymore...", 
        Toast.LENGTH_SHORT).show(); 

      nofav = true; 
     } 
    } 

Wenn ich das Image klicken ändert das Bild. Das Problem ist: Ich klicke auf die Schaltfläche in einer Ansicht (heart_red nach dem Klick) und wische nach rechts (zur Zeit Herz). In der neuen Ansicht klicke ich auf den Heart ImageButton. Dann sollte der ImageButton zu heart_red werden, stattdessen setzt er den ImageButton erneut mit der Meldung "No favourite among ..." fest. Grund: es ist noch gespeichert

nofav = false; 

Also meine Frage ist. Wie kann ich die aktuelle ImageResource einer Ansicht abrufen? Mit diesen Informationen konnte ich die nofav-Variable mit jeder neuen Ansicht festlegen.

Vielleicht hat jemand auch eine bessere Idee, wie man damit umgeht. Vielen Dank!

LÖSUNG - Veneets Idee mit Tag funktioniert perfekt für mich. Habe gerade den Message Toast hinzugefügt.

public void onClickFav(View v) { 
     ImageButton favouriteButton = (ImageButton) v; 

     Boolean isFav = favouriteButton.getTag() == null ? Boolean.FALSE : (Boolean) favouriteButton.getTag(); 

     favouriteButton.setImageResource(isFav ? R.drawable.heart : R.drawable.heart_red); 

     if (isFav) { 
      Toast.makeText(SuggestionActivity.this, "No favourite anymore...", 
        Toast.LENGTH_SHORT).show(); 
     } else { 
      Toast.makeText(SuggestionActivity.this, "Woah, new favourite!", 
        Toast.LENGTH_SHORT).show(); 
     } 

     favouriteButton.setTag(!isFav); 
    } 

Antwort

0

Sie können den Lieblingszustand ImageButton mit Hilfe von Tags pflegen:

public void onClickFav(View v) { 
     ImageButton favouriteButton = (ImageButton) v; 

     // Assuming default is false 
     Boolean isFav = favouriteButton.getTag() == null ? Boolean.FALSE : (Boolean) favouriteButton.getTag(); 

     favouriteButton.setImageResource(isFav ? R.drawable.heart : R.drawable.heart_red); 
     favouriteButton.setTag(!isFav); 
    } 
Verwandte Themen