#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"/>
два дня потрачены впустую из-за неправильного изображения…
* Вздох*