Кнопка изображения Android ведет себя странно

#android #user-interface #imagebutton

#Android #пользовательский интерфейс #imagebutton

Вопрос:

Я создаю фреймворк приложения для планшетов Android, и у меня возникла странная проблема с некоторыми кнопками ImageButtons. Эти кнопки (Next amp; Prev) используются для навигации по «страницам содержимого» как часть фреймворка и используют пользовательские фоновые рисунки.

Проблема в том, что всякий раз, когда я нажимаю на предыдущую кнопку, следующая кнопка подсвечивается, а предыдущая кнопка — нет. Сначала я подумал, что это простая ссылка или @ id / проблема, но выполняется действие предыдущей кнопки, а не следующей кнопки.

Вот некоторый соответствующий код:

В методе onCreate():

 nextButton = (ImageButton) findViewById(R.id.nextButton);
prevButton = (ImageButton) findViewById(R.id.prevButton);
nextButton.setOnClickListener(this);
prevButton.setOnClickListener(this);
  

Метод onClick:

 public void onClick(View v) {
    if(_cpp == null){
        finish();
    }else if (v == nextButton) {
        if (!_cpp.nextRes.equalsIgnoreCase("")) {
            // load next page
            _tempRes = _cpp.nextRes;
            //start transition out animations
            fadePageOut();
        } else {
            finish();
        }
    } else if (v == prevButton) {
        if (!_cpp.prevRes.equalsIgnoreCase("")) {
            // load previous page
            _tempRes = _cpp.prevRes;
            //start transition out animations
            fadePageOut();
        }
    }
}
  

Мой рисованный XML:

 <?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable= "@drawable/prev_arrowhigh" />
<item android:state_pressed="true" android:state_enabled="true"
    android:drawable="@drawable/prev_arrowhigh" />
<item android:state_focused="true" android:state_enabled="true"
    android:drawable="@drawable/prev_arrow" />
<item android:state_enabled="true" android:drawable="@drawable/prev_arrow" />
</selector>
  

Я уже два дня отлаживаю и ищу ответ, но безуспешно. Самое смешное, что раньше она работала просто отлично… но даже возврат к предыдущей версии моего проекта, похоже, совсем не помог.

Кто-нибудь сталкивался с этой проблемой раньше или имеет какие-либо идеи, что может быть причиной этого?

Комментарии:

1. являются ли кнопки «предыдущий» и «следующий» одинаковыми для рисования (с поворотом)? это может быть проблемой

2. Нет, они используют два отдельных чертежа. prev_button.xml и next_button.xml . Они установлены в XML-файле макета.

Ответ №1:

Решение, которое вы можете попробовать, — установить атрибут onClick в вашем представлении. Решение может выглядеть следующим образом:

Метод onCreate:

 nextButton = (ImageButton) findViewById(R.id.nextButton);
prevButton = (ImageButton) findViewById(R.id.prevButton);
  

новые методы для действия:

 public void nextButton(View v)
{
    if(_cpp == null || _cpp.nextRes.equalsIgnoreCase(""))
    {
        finish();
        return;
    }

    // load next page
    _tempRes = _cpp.nextRes;
    //start transition out animations
    fadePageOut();
}

public void prevButton(View v)
{
    if(_cpp == null)
    {
        finish();
        return;
    }

    if (!_cpp.prevRes.equalsIgnoreCase(""))
    {
        // load next page
        _tempRes = _cpp.nextRes;
        //start transition out animations
        fadePageOut();
    }
}
  

и добавьте:
android: onClick=»nextButton»

android: onClick =»prevButton»

для ваших кнопок в файле xml

Комментарии:

1. Это отличная альтернатива использованию setOnClickListener(), но не как решение моей проблемы (я пробовал). Кажется, что мои события щелчка обрабатываются Android правильно, это просто изменение изображений на неправильной кнопке. В любом случае спасибо.

2. Стоит попробовать изменить подход .. 🙂 Вы пытались удалить стили и рисовать для предыдущей кнопки, чтобы посмотреть, по-прежнему ли стиль по умолчанию ведет себя странно?

3. Я просто попытался использовать кнопки вместо ImageButton с возможностью рисования фона, и тогда все работает нормально. Как вы думаете, проблема может быть в моем рисованном XML-файле?

4. Я просто попытался использовать мой next_button. XML drawable (который отлично работает для следующей кнопки) для обеих кнопок, и проблема сохраняется. :/

5. ну, вы можете поменять местами положение предыдущей и следующей кнопок (на макете), чтобы проверить, есть ли проблема в файле xml

Ответ №2:

Решаемая! глупый, глупый я…

Следующая кнопка отображалась как выбранная, потому что в моем коде (часть не опубликована) отключает кнопку во время моего метода fadePageOut () (см. Опубликованный код). Отображаемое состояние просто использовало неправильные изображения для включенных / отключенных состояний.

Это:

 <item android:state_enabled="false" android:drawable="@drawable/prev_arrowhigh"/>
  

Должно было быть:

 <item android:state_enabled="false" android:drawable="@drawable/prev_arrow"/>
  

два дня потрачены впустую из-за неправильного изображения…
* Вздох*