В настоящее время я делаю SMS-приложение на Android, ниже приведен фрагмент кода из Inbox Listactivity, я запросил курсор из ContentResolver и использовал пользовательский адаптер для добавления пользовательских представлений в список.
Теперь в пользовательском представлении у меня есть 2 TextViews (tvFullBody, tvBody)... tvFullBody содержит полный текст SMS, а tvBody содержит краткий предварительный просмотр (35 символов). Для параметра видимости tvFullBody по умолчанию установлено значение GONE.
Моя идея заключается в том, что когда пользователь щелкает элемент списка, tvBody должен исчезнуть (GONE), а tvFullBody должен стать видимым (VISIBLE). При повторном нажатии он должен вернуться в исходное состояние.
//isExpanded is a BitSet of the size = no of list items...keeps track of which items are expanded and which are not
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
if(isExpanded.get(position))
{
v.findViewById(R.id.tvFullBody).setVisibility(View.GONE);
v.findViewById(R.id.tvBody).setVisibility(View.VISIBLE);
}else
{
v.findViewById(R.id.tvFullBody).setVisibility(View.VISIBLE);
v.findViewById(R.id.tvBody).setVisibility(View.GONE);
}
isExpanded.flip(position);
super.onListItemClick(l, v, position, id);
}
Код работает так, как и предполагалось :) за исключением нежелательного побочного эффекта... Каждый 10-й (или около того) элемент списка также "переключается". например. Если я разверну 1-й, то 11-й, 21-й элементы списка также будут расширены ... Хотя они остаются за пределами экрана, но при прокрутке вы увидите нежелательное «расширение».
По моему анализу новичков, я предполагаю, что Listview отслеживает 10 элементов списка, которые в настоящее время видны, при прокрутке он «повторно использует» те же самые переменные, которые вызывают эту проблему... (я не проверял исходный код Android пока.) Я был бы признателен за любое предложение о том, как мне решить эту проблему! :) Я также открыт для альтернативных методов.... Заранее спасибо! :)