2013-09-02 4 views
7

У меня есть GridView, который использует массивный адаптер для заполнения данных.Как установить элемент сетки как выбранный

По умолчанию, когда отображается GridView, я должен показать один из выбранных элементов. Я использовал gridview.setselected(), но он не отобразил пункт GridView как выбранный (я имею в виду, что фон элемента не изменяется). есть ли способ показать определенный элемент, выбранный при загрузке вида сетки. Пожалуйста, предложите

+0

Я установил селектор по умолчанию в прозрачный, и в getview я установил цвет фона для выбранного элемента. добавлен notifydatasetchange по методу onitemclick ... он работал – user2702700

ответ

1

В getView() методе адаптера выполните следующие действия

if(row != null) { 
    if(position == selectedPosition){ 
     set required background color 
    } else { 
     set background color to Color.TRANSPARENT 
    } 
} 

В методе onItemClick установить Adapter.selectedPosition значение и вызвать notifydatasetchanged(), а затем продолжить требуется логика.

в <GridView> пункта XML установить listSelector в android:color/transparent

+0

метод notifydatasetchanged() не вызвал getView() – twlkyao

+0

Что выбраноОпределение здесь? –

5

GridView.setSelected() на самом деле унаследован от View и просто устанавливает в вашем макете весь GridView.

То, что вы ищете, это GridView.setSelection(int position), чтобы выбрать текущий элемент в GridView, начиная с позиции нуля.

Другая полезная функция: GridView.getFirstVisblePostion(), которая может использовать для хранения текущего местоположения на GridView (если он большой и прокручиваемый), чтобы его можно было восстановить, когда вы восстановлены из состояния экземпляра (скажем, при вращении) или иным образом.

При работе с такими вещами всегда полезно просматривать Android Developer documentation для вашего виджета/объекта.

+0

GridView.setSelection (int position) также не работает. Фон элементов сетки не изменяется. – user2702700

+0

Возможно, вам захочется взглянуть на макет элемента GridView и проверить, что вы используете для фона. Вы уверены, что у него есть другой фон для выбранного состояния? –

+0

Я запускаю приложение с помощью мыши в эмуляторе, и я установил focusInTouch также в true, но все же фон не обновлялся.Но если я выберу какой-либо элемент, то фон будет изменен на цвет, который я установил в атрибуте listselector gridview. – user2702700

-1

Проверка с помощью следующего метода

GridView.setBackgroundResource(R.drawable.new_image_to_be_shown); 

Это позволит вам изменить цвет фона выбранного элемента в качестве нового изображения.

И если вы хотите изменения цвета выбранного элемента затем потребительных

GridView.setBackgroundColor(int color); 

Это позволит решить вашу проблему.

+0

, это изменяет цвет всей сетки, а не элемент – Krzysztof

2

Я надеюсь, что это поможет вам

gridView.requestFocusFromTouch(); 
     gridView.setSelection(1); 
+0

. Я пробовал это, но не работал. – user2702700

+1

Это помогает сетке прокручивать этот элемент. Спасибо чувак. –

14

вчера я боролся с этим немного, прежде чем понял, что я на самом деле хотел, чтобы этот пункт, чтобы проверить. то есть

gridview.setItemChecked(position, true); 
+0

Спасибо, человек, это работает! – Qianqian

+0

Работает для меня тоже! Спасибо! –

Смежные вопросы