我有一个包含工具栏和FrameLayout的活动。 FrameLayout是片段的占位符。在我的一个片段中,有我的主屏幕ListView。
目前,当用户在此ListView中向下滚动时,我隐藏了工具栏。当用户向上滚动时,我会再次显示工具栏。
到目前为止,代码看起来像这样:
listView.setOnScrollListener(new OnScrollObserver(){
@Override
public void onScrollUp() {
toolbar.setVisibility(View.GONE);
}
@Override
public void onScrollDown() {
toolbar.setVisibility(View.VISIBLE);
}
});
这是OnScrollObserver:
public abstract class OnScrollObserver implements AbsListView.OnScrollListener {
public abstract void onScrollUp();
public abstract void onScrollDown();
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
int last = 0;
boolean control = true;
@Override
public void onScroll(AbsListView view, int current, int visibles, int total) {
if (current < last && !control) {
onScrollUp();
control = true;
} else if (current > last && control) {
onScrollDown();
control = false;
}
last = current;
}
}
它到目前为止有效,但存在问题。隐藏工具栏时,ListView会占用整个屏幕,这是预期的行为。但问题是,当发生这种情况时,由于大小的改变而重新加载ListView(我假设)。一切都被重新绘制并重新计算,这会降低性能。
有没有其他选择?每次隐藏或显示工具栏时如何防止重新加载?
答案 0 :(得分:2)
您必须使用以下代码而不是您的代码:
listView.setOnScrollListener(new OnScrollObserver(){
@Override
public void onScrollUp() {
toolbar.setVisibility(View.INVISIBLE);
}
@Override
public void onScrollDown() {
toolbar.setVisibility(View.VISIBLE);
}
});