2010-06-30 3 views
10

Есть ли способ, с помощью которого я могу найти, какой ресурс определен для ImageButton в любое время?Android ImageButton - определите, какой ресурс в данный момент установлен

Для примера: у меня есть ImageButton, который я установил в R.drawable.btn_on onCreate. Позже, в какой-то момент, ImageButton устанавливается в R.drawable.btn_off. Я хочу проверить, на какой ресурс установлен ImageButton в моем коде.

Благодаря Chris

ответ

16

Просто используйте setTag() и getTag() для связи и получения пользовательских данных для вашего ImageView.

+0

Спасибо, я тоже кое-что узнал. Кажется, все проще. – Joubarc

0

Я не знаю, как получить доступ к ресурсу напрямую, но за то, что вы пытаетесь достичь, не будет достаточно, чтобы просто получить состояние?

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

Не нужен цикл for. – Siddharth

3

Вы можете определить свой собственный класс, как ребенок ImageButton, добавить частное ИНТА переменных и установить его, когда setImageResource(int) называется. Что-то вроде:

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; 
    } 
} 

Я не проверял, но вы получите идею - то вы можете позвонить getImageResource() на кнопке, предполагая, что он уже был установлен ранее с setImageResource().

+0

Тем не менее, я согласен с slup - если вы хотите проверить состояние своей кнопки, есть более логичные способы сделать это. – Joubarc

0

Неверная документация по android docs. Здесь говорится, что pickDropPoint.getDrawableState()[android.R.attr.state_pressed] возвращает true или false, но вместо этого он возвращает 1 или 0, a **int**.

я должен был сделать следующее, чтобы получить его работу

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

вытяжки XML для прессованного чувства

<?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> 

В коде, вам не нужно для цикла, как было предложено @slup

whichPoint = (pickDropPoint.getDrawableState()[android.R.attr.state_pressed] > 1 ? PICKUP : DROP); 
Смежные вопросы