如何在大小改变时阻止ListView重新加载?

时间:2018-03-06 13:14:57

标签: android

我有一个包含工具栏和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(我假设)。一切都被重新绘制并重新计算,这会降低性能。

有没有其他选择?每次隐藏或显示工具栏时如何防止重新加载?

1 个答案:

答案 0 :(得分:2)

您必须使用以下代码而不是您的代码:

listView.setOnScrollListener(new OnScrollObserver(){
@Override
public void onScrollUp() {
        toolbar.setVisibility(View.INVISIBLE);
        }

@Override
public void onScrollDown() {
        toolbar.setVisibility(View.VISIBLE);
     }

        });