Когда я добавляю setOnItemSelectedListener в галерею в Android, селектор состояния перестает работать. Знаете ли вы, чтобы избежать этого? - PullRequest
2 голосов
/ 27 июля 2011

У меня очень простая Галерея с изображениями, и у меня есть XML-файл с селектором для различных состояний. Он работает отлично (выбранный имеет синий фон, остальные - красный), пока я не добавлю setOnItemSelectedListener. Затем селекторы состояния перестают менять фон выбранного элемента. Просто покажите все фоны как невыбранные. Очевидно, что Listener обгоняет управление макетом, но не знает, как избежать этого.

Вот мой код:

1. start.java

Часть ImageAdapter

public View getView(int position, View convertView, ViewGroup parent) {            
ImageView image = new ImageView(contex);
image.setImageResource(gallery.get(position));
image.setLayoutParams(new Gallery.LayoutParams(100,75)); 
image.setScaleType(ImageView.ScaleType.FIT_XY);
image.setBackgroundResource(R.drawable.background); //here is drawable with selector

Часть Слушателя (когда я удаляю этот Слушатель, он работает)

public void Listen() {
gallery.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) 
{text.setText("test");}

@Override
public void onNothingSelected(AdapterView<?> parent) {}
}; } 

2. background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@drawable/blueback" />
    <item android:drawable="@drawable/redback" /> 
</selector>

1 Ответ

0 голосов
/ 13 июля 2012

Вы можете попробовать установить onSelectedListener для отдельных элементов в методе getView() для ImageAdapter вместо его установки на самом Gallery.

Во-вторых, выбор все еще происходит?Я имею в виду, onItemSelected() вызывается?Это означало бы, что проблема только в чертеже селектора.Если onItemSelected вообще не вызывается, вам может потребоваться сделать setClickable(true) в представлении, которое вы возвращаете в getView().

...