Android: пользовательская галерея setSelection () выдает - PullRequest
4 голосов
/ 27 января 2012

У меня есть расширенный BaseAdapter, у которого есть дочерние элементы LinearLayout (ImageView и TextView в каждом), подключенные к пользовательской галерее.

Когда я впервые запускаю свою активность, я хочу вызвать setSelection(position), чтобы заставить ImageView сменить селектор на «выбранное» изображение.Это работает, как только я запускаю Галерею, на последующих выбранных дочерних элементах, но не в первый раз при запуске приложения.

Мой селектор:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" 
    android:drawable="@drawable/home_image_select" /> 
<item android:state_selected="false" 
    android:drawable="@drawable/home_image" /> 
</selector>

Моим первым предположением было вызвать notifyDataSetChanged () на адаптере после вызова setSelection (), который я попытался сделать так:

((CustomAdapter) gallery.getAdapter()).notifyDataSetChanged();

Это ничего не сделало.Я также попытался переопределить setSelection () класса Gallery, чтобы сделать это:

View v = this.getAdapter().getView(position, null, this);       
((ImageView) v.findViewById(R.id.gallery_image)).setSelected(true);

Это тоже не работает.Что-то я пропустил или мог попробовать?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2012

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

Просто позвоните setSelection(position), это работает в моем приложении.

0 голосов
/ 18 февраля 2012

Я нашел решение своей собственной проблемы, переписав setSelection () галереи (это сработало в конце концов).

 @Override
public void setSelection(int position) {
    super.setSelection(position);

    View v = this.getAdapter().getView(position, null, this);
    v.setFocusable(true);
    v.requestFocus();
}
...