使用 CustomListViewAdapter 时以编程方式滚动到 ListView 中的项目
scrolling programmatically to item in ListView when using CustomListViewAdapter
我试图在使用 CustomListViewAdapter 时以编程方式滚动到列表视图中的特定位置。
我使用自定义列表视图适配器,因为每当单击列表视图中的项目时,它 "opens up" 都会显示一些文本。正是在这一点上,我想以编程方式滚动到刚刚显示的文本的顶部。
目前,一切正常,除了我不知道如何调用函数:
listview.setSelection(currentPosition);
我似乎无法在 CustomListViewAdapter 中找到它,这是我在列表视图项目上监听点击事件的地方。
我试过打电话:
parent.setSelected(true);
点击项目后,函数
notifyDataSetChanged();
被调用,但它什么都不做。
如何调用
listview.setSelection(currentPosition);
甚至更好:
listview.smoothScrollToPositionFromTop(position,offset,duration);
在 CustomListViewAdapter 中 class?
下面是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;
}
我看过几个帖子,但 none 有帮助。
谢谢。
在适配器的构造函数中传递列表视图:
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 方法。
希望对您有所帮助。
我试图在使用 CustomListViewAdapter 时以编程方式滚动到列表视图中的特定位置。
我使用自定义列表视图适配器,因为每当单击列表视图中的项目时,它 "opens up" 都会显示一些文本。正是在这一点上,我想以编程方式滚动到刚刚显示的文本的顶部。
目前,一切正常,除了我不知道如何调用函数:
listview.setSelection(currentPosition);
我似乎无法在 CustomListViewAdapter 中找到它,这是我在列表视图项目上监听点击事件的地方。
我试过打电话:
parent.setSelected(true);
点击项目后,函数
notifyDataSetChanged();
被调用,但它什么都不做。
如何调用
listview.setSelection(currentPosition);
甚至更好:
listview.smoothScrollToPositionFromTop(position,offset,duration);
在 CustomListViewAdapter 中 class?
下面是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;
}
我看过几个帖子,但 none 有帮助。 谢谢。
在适配器的构造函数中传递列表视图:
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 方法。
希望对您有所帮助。