2010-06-30 4 views
10

Gibt es eine Möglichkeit, zu welcher Zeit ich finde, auf welche Ressource ein bestimmtes ImageButton eingestellt ist?Android ImageButton - Bestimmen, welche Ressource gerade eingestellt ist

Für zB: Ich habe ein ImageButton, das ich auf R.drawable.btn_on onCreate gesetzt habe. Zu einem späteren Zeitpunkt wird der ImageButton auf R.drawable.btn_off gesetzt. Ich möchte prüfen können, auf welche Ressource der ImageButton in meinem Code eingestellt ist.

Dank Chris

Antwort

16

Verwenden Sie einfach setTag() und getTag(), um benutzerdefinierte Daten für Ihre ImageView zu verknüpfen und abzurufen.

+0

Danke, ich habe auch etwas gelernt. Scheint tatsächlich viel einfacher. – Joubarc

0

Ich weiß nicht, wie die Ressource direkt zugreifen, aber für das, was Sie zu erreichen versuchen, wäre es nicht nur den Zustand genügen zu bekommen?

ImageButton btn = (ImageButton) findViewById(R.id.btn); 

    int [] states = btn.getDrawableState(); 
    for (int i : states) { 
     if (i == android.R.attr.state_pressed) { 
      Log.v("btn", "Button in pressed state"); 
     } 
    } 

http://developer.android.com/reference/android/R.attr.html#state_pressed

+1

Sie brauchen die for-Schleife nicht. – Siddharth

3

Sie könnten Ihre eigene Klasse als Kind ImageButton, fügen Sie eine private int Variable definieren und festlegen, wenn setImageResource(int) genannt wird. Etwas wie:

public class MyImageButton extends ImageButton { 

    private int mImageResource = 0; 

    @Override 
    public void setImageResource (int resId) { 
     mImageResource = resId; 
     super.setImageResource(resId); 
    } 

    public int getImageResource() { 
     return mImageResource; 
    } 
} 

Ich habe es nicht getestet, aber Sie bekommen die Idee - dann können Sie getImageResource() auf Ihre Schaltfläche aufrufen, es wurde vorher festgelegt mit setImageResource() annimmt.

+0

Das heißt, ich stimme mit slup - wenn Sie den Zustand Ihres Knopfes testen möchten, gibt es mehrere logische Möglichkeiten, es zu tun. – Joubarc

0

Die Dokumentation zu android docs ist nicht korrekt. Hier heißt es, dass pickDropPoint.getDrawableState()[android.R.attr.state_pressed]true oder false zurückgibt, aber stattdessen 1 oder 0, ein **int** zurückgibt.

Ich hatte die folgenden, um es arbeitet

  <ImageButton 
      android:id="@+id/pickDropPoint" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="6" 
      android:background="#EEeeeee4" 
      android:contentDescription="pick or drop point" 
      android:src="@drawable/pickupdrop" /> 

Die ziehbar xml für gepresstes Gefühl

<?xml version="1.0" encoding="utf-8"?> 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:src="@drawable/start32" android:state_pressed="true"/> 
    <item android:src="@drawable/end32" android:state_pressed="false"/> 
    <corners 
     android:bottomLeftRadius="3dp" 
     android:bottomRightRadius="3dp" 
     android:topLeftRadius="3dp" 
     android:topRightRadius="3dp" /> 

</selector> 

In Code zu tun, können Sie die for-Schleife nicht brauchen, wie durch @slup

vorgeschlagen
whichPoint = (pickDropPoint.getDrawableState()[android.R.attr.state_pressed] > 1 ? PICKUP : DROP); 
Verwandte Themen