10 Stimmen

Android ImageButton - Bestimmen Sie, welche Ressource aktuell eingestellt ist

Gibt es eine Möglichkeit, wie ich herausfinden kann, auf welche Ressource ein bestimmter ImageButton zu einem bestimmten Zeitpunkt eingestellt ist?

Zum Beispiel: Ich habe einen ImageButton, den ich auf R.drawable.btn_on onCreate. Später, zu einem bestimmten Zeitpunkt, wird der ImageButton auf R.drawable.btn_off . Ich möchte in der Lage sein, zu überprüfen, welche Ressource die ImageButton in meinem Code festgelegt ist.

Danke Chris

14voto

CommonsWare Punkte 950864

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

3voto

Joubarc Punkte 1206

Sie könnten Ihre eigene Klasse als Kind von ImageButton fügen Sie eine private int-Variable hinzu und setzen Sie sie, wenn setImageResource(int) genannt wird. Etwa so:

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 verstehen die Idee - dann können Sie getImageResource() auf Ihrer Schaltfläche aufrufen, vorausgesetzt, es wurde zuvor mit setImageResource() gesetzt.

0voto

slup Punkte 5374

Ich weiß nicht, wie man direkt auf die Ressource zugreifen kann, aber für das, was Sie erreichen wollen, würde es nicht ausreichen, nur den Status zu erhalten?

    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

0voto

Siddharth Punkte 9123

Die Dokumentation über Android-Dokumente ist falsch. Hier heißt es, dass pickDropPoint.getDrawableState()[android.R.attr.state_pressed] gibt zurück. true o false zurück, sondern gibt stattdessen 1 o 0 an **int** .

Ich musste Folgendes tun, damit es funktioniert

            <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" />

Das ziehbare 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>

Im Code brauchen Sie die for-Schleife nicht, wie von @slup vorgeschlagen

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X