Возникли проблемы с изменением изображения на imageButton во время выполнения

Я пытаюсь обновить изображение imageButton во время выполнения. У меня есть оператор switch, который проверяет идентификатор, переданный из другого действия. Я знаю, что оператор switch работает, поскольку в TextView передается правильный идентификатор.

Я искал и видел, что некоторые примеры используют ImageView, а другие используют ImageButton. Как вы можете видеть ниже, я пробовал оба, и ни один из них не работает.

XML-макет:

    <ImageButton android:visibility="gone" android:id="@+id/imageButton" android:src="@drawable/defaultimage" android:layout_width="97dp" android:layout_height="95dp"></ImageButton>
    <TextView android:visibility="gone" android:text="TextView" android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true"></TextView>

Java-код:

    case 1:{
            // Location 1
            ImageView ImageButton = (ImageView)findViewById(R.id.imageButton);
            ImageButton .setImageResource(R.drawable.image1);
            ImageButton .setVisibility(0);
            TextView Test = (TextView)findViewById(R.id.textView);
            Test.setVisibility(0);
            Test.setText("ID passed is" + id);
            break;
            }
        case 2:{
            // Location 2
            ImageButton ImageButton = (ImageButton)findViewById(R.id.imageButtonGhostCamLocation);
            ImageButton .setBackgroundResource(R.drawable.image2);
            ImageButton .setVisibility(0);

            TextView Test = (TextView)findViewById(R.id.textView);
            Test.setVisibility(0);
            Test.setText("ID passed is" + id);
            break;

ОБНОВЛЕНИЕ

Получил работу! Я только что удалил android src из ImageButton в макете xml, и теперь он работает нормально. Спасибо за помощь!


person Shannon Cole    schedule 20.10.2011    source источник
comment
Во-первых, вы должны проверить соглашения об именах Java (java.about.com/od/javasyntax /a/nameconventions.htm). ImageButton ImageButton = (ImageButton)findViewById(..) не имеет никакого смысла.   -  person Stephan    schedule 20.10.2011
comment
Я изменил имя здесь, чтобы его было легче читать... ImageButton ImageButton на самом деле является ImageButton myImageButtonName. Прости за это. :-)   -  person Shannon Cole    schedule 20.10.2011


Ответы (3)


Логика вашего кода кажется правильной (если только в вашем исходном коде нет таких забавных вещей, как ImageButton ImageButton). Проблема должна быть где-то в другом.

Вы видите кнопку, если удалить android:visibility="gone" из макета?

Кстати вместо:

setVisibility(0);

использовать

setVisibility(View.VISIBLE);

Таким образом, это более читабельно.

person Caner    schedule 20.10.2011
comment
Спасибо за этот совет! Я искал это. :-) - person Shannon Cole; 20.10.2011

заменить это

ImageButton imageButton = (ImageButton)findViewById(R.id.imageButton);
imageButton .setImageResource(R.drawable.image1);
imageButton .setVisibility(0);

Вы используете ImageButton в xml и получаете его как ImageView в Java

person Adil Soomro    schedule 20.10.2011
comment
Как уже упоминалось, я включил оба сюда, чтобы показать, что я сделал. Ни один из переключателей не работает должным образом. Если я использую ImageButton или ImageView (как я видел, это предлагалось в разных местах). - person Shannon Cole; 20.10.2011

не позволит использовать базовые функции, такие как этот ImageButton, в качестве переменной. используйте этот код

private ImageButton myButton;

в onCreate()

myButton = (ImageButton) findViewById(R.id.imageButton);

и эта переменная myButton в коде.

case 1:{
        // Location 1            
        myButton .setImageResource(R.drawable.image1);
        my .setVisibility(0);
        TextView Test = (TextView)findViewById(R.id.textView);
        Test.setVisibility(0);
        Test.setText("ID passed is" + id);
        break;
        }
    case 2:{
        // Location 2          
        myButton.setBackgroundResource(R.drawable.image2);
        my.setVisibility(0);
        TextView Test = (TextView)findViewById(R.id.textView);
        Test.setVisibility(0);
        Test.setText("ID passed is" + id);
        break;
person RajaReddy PolamReddy    schedule 20.10.2011