我有一个ListView,我希望每次点击按钮都能移动到目标位置。
NextButton工作正常,但PrevButton存在问题。
每当我点击PrevButton时,目标位置始终是滚动到新视图后的第一个位置。
例如, 如果我这样设置:
mListView.setSelection(5);
滚动目标位置后,新视图将是 位置5,6,6,8等
如何让它成为新视图的最后位置,例如位置1,2,3,4,5?
我知道他们可以使用默认的图库应用
来做到这一点代码:
PrevButton = (ImageButton) findViewById(R.id.Pre_Button);
PrevButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
((BaseAdapter) mListView.getAdapter()).notifyDataSetChanged();
mListView.setSelection(LastItemPos - 1);
}
});
NextButton = (ImageButton) findViewById(R.id.Next_Button);
NextButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
((BaseAdapter) mListView.getAdapter()).notifyDataSetChanged();
mListView.setSelection(LastItemPos + 1);
}
});
谢谢
答案 0 :(得分:0)
假设ListView中的每个View都具有相同的高度,您所需要做的就是确定每个View的高度,然后除以ListView的高度。
要想出一个视图高度,只需要给它充气,用“未指定的”measurepec测量它,然后得到测量的高度:
public int getItemHeight(ListView listView, int listViewItemId) {
MeasureSpec widthSpec = MeasureSpec.makeSpec(MeasureSpec.EXACTLY, listView.getWidth());
MeasureSpec heightSpec = MeasureSpec.makeSpec(MeasureSpec.UNSPECIFIED, listView.getHeight());
View listViewItem = LayoutInflator.from(context).inflate(R.layout.idOfListViewItem, listView, false);
listViewItem.measure(widthSpec, heightSpec);
return listViewItem.getHeight();
}
然后,弄清楚将在ListView上放置多少项目。
int itemHeight = getItemheight(listView, R.layout.layoutIdOfItem);
int numOfItems = itemHeight / listView.getHeight();
然后,无论何时设置位置,只需从位置中减去项目数。虽然你必须确保它不低于0。
int itemToScrollTo = 5 - numOfItems;
if (itemToScrollTo < 0) {
itemToScrollTo = 0;
}
listView.setPosition(itemToScrollTo);