Поскольку по умолчанию ListViews
установлен в режим выбора NONE
, в сенсорном режиме метод setSelection
не будет иметь визуального эффекта.
Чтобы сохранить предыдущий выбор / визуально отобразить явный выбор, сначала вы должны соответствующим образом установить режим выбора списка:
listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
Полезно прочитать Документацию по API этих методов:
void android.widget.AdapterView.setSelection(int position)
Устанавливает текущий выбранный элемент. к
поддерживать доступность подклассов, которые
переопределить этот метод должен вызвать
Сначала переопределите метод super.
Параметры :
position
Индекс (начиная с 0) выбранного элемента данных.
void android.widget.ListView.setChoiceMode(int choiceMode)
Определяет поведение выбора для
Список. По умолчанию списки не имеют
любое поведение выбора
(CHOICE_MODE_NONE
). Установив
Выбор режима CHOICE_MODE_SINGLE
,
Список позволяет до одного элемента быть в
выбранное государство. Установив
choiceMode to CHOICE_MODE_MULTIPLE
,
список позволяет любое количество элементов
быть выбранным.
Параметры :
choiceMode
Один из CHOICE_MODE_NONE
,
CHOICE_MODE_SINGLE
или CHOICE_MODE_MULTIPLE
В случае, если этого недостаточно (скажем, вы хотите всегда показывать последний выбор по-другому, кроме текущего выбора), вы должны сохранить свой последний выбранный элемент (данные, которые заполняют ListAdapter
) как lastSelectedItem
, и в методе getView
вашего адаптера назначьте другой фоновый ресурс для рендерера, если он равен lastSelectedItem
.
Если ваш последний выбор не обновится при изменении выбора, вам следует явно вызвать метод notifyDataSetChanged
на экземпляре адаптера.
Обновление
Так как ваша деятельность, содержащая ListView
, является дочерней по отношению к операции, которая ожидает результата этого (на основе части setResult(Activity.RESULT_OK,pongIntent);
), первоначальная идея верна, последняя позиция должна быть пропущена через намерение при запуске операции:
selectedListItem = getIntent().getIntExtra("PositionInList", -1);
lvUsers.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lvUsers.setSelection(selectedListItem);
Решение ListView.CHOICE_MODE_SINGLE
будет работать, если вы останетесь в одном и том же упражнении, но завершаете его при каждом щелчке по элементу (изменение выбора), поэтому дополнительные данные следует передавать в начальный Intent
.
Вы также можете установить фон выбранного ранее элемента с помощью адаптера (как упоминалось выше), переопределяя его метод getView
:
lvUsers.setAdapter(new ArrayAdapter(this, R.id.counlistView, groups)
{
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
final View renderer = super.getView(position, convertView, parent);
if (position == selectedListItem)
{
//TODO: set the proper selection color here:
renderer.setBackgroundResource(android.R.color.darker_gray);
}
return renderer;
}
});