Я пытаюсь программно выполнить прокрутку до определенной позиции в представлении списка при использовании CustomListViewAdapter.
Я использую customlistviewadapter, потому что всякий раз, когда щелкают по элементу в списке, он «открывается» для отображения некоторого текста. Именно в этот момент я хочу программно выполнить прокрутку до верхней части только что отображаемого текста.
В настоящее время все работает нормально, ЗА ИСКЛЮЧЕНИЕМ того, что я не знаю, как вызвать функцию:
listview.setSelection(currentPosition);
Кажется, я не могу добраться до него в CustomListViewAdapter, где я прослушиваю событие щелчка в элементе listview.
Я пробовал вызвать:
parent.setSelected(true);
Сразу после щелчка по элементу и функции
notifyDataSetChanged();
вызывается, но ничего не делает.
Как я могу вызвать
listview.setSelection(currentPosition);
или даже лучше:
listview.smoothScrollToPositionFromTop(position,offset,duration);
В классе CustomListViewAdapter?
Ниже приведен код CustomListViewAdapter.
public class CustomListViewAdapter extends ArrayAdapter<RowItem> {
Context context;
ArrayList<RowItem> _rowItems;
RowItem item;
View row;
TextView ReferenceGospel;
public CustomListViewAdapter(Context context, int resourceId,
ArrayList<RowItem> rowItems) {
super(context, resourceId, rowItems);
this.context = context;
_rowItems = rowItems;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
row = convertView;
item = _rowItems.get(position);
if (row == null) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = mInflater.inflate(R.layout.book_list, parent, false);
row.setTag(thisPosition);
}
ReferenceGospel = (TextView) row.findViewById(R.id.gospelRef);
// ... some other code here
ReferenceGospel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item = _rowItems.get(position);
CustomListViewAdapter.this.notifyDataSetChanged();
}
});
return row;
}
Я просмотрел несколько сообщений, но ничего не помогло. Спасибо.
Извините за непонятность. Открывая его, я имею в виду, что элемент списка становится видимым ... я не включил код, который это делает. Так что это сам элемент списка.
@Sahil, приложение доступно для загрузки, где вы можете ясно понять, что я имею в виду, отображая некоторый текст. Если это поможет, я могу отправить вам ссылку на приложение. Спасибо!
Передайте список в конструкторе адаптера:
ListView listView;
public CustomListViewAdapter(Context context, ListView listView,
ArrayList<RowItem> rowItems) {
super(context, resourceId, rowItems);
this.context = context;
this.listView = listView;
_rowItems = rowItems;
}
тогда вы можете вызвать listview.smoothScrollToPositionFromTop(position,offset,duration);
из метода getView.
Надеюсь, поможет.
Спасибо. Это помогает. Конечно, все, что мне нужно было сделать, это передать список в адаптер. Отлично, спасибо за помощь, работает отлично!
"он" открывается "для отображения текста". вы можете объяснить больше? как текст отображается в отдельном диалоге в самом элементе списка?