如何使用按钮使ListView正确移动到目标位置?

时间:2015-02-10 04:45:17

标签: android android-activity android-listview android-button

我有一个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);
            }
        });

谢谢

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);