如何禁用 android 列表视图中的过度滚动和弹跳?

2023-12-19

我的列表视图在两台设备上的行为是,当我过度滚动它时它会变成黄色/橙色,或者它可以过度滚动然后弹回。后一种行为很糟糕,因为它显示了我想要阻止的背景。

I tried:

listview.setOverScrollMode(ListView.OVER_SCROLL_NEVER);

它不再显示背景,但现在有一个非常烦人的反弹效果。是否可以同时禁用弹跳和过度滚动,并使滚动在到达末尾时结束而没有任何效果?

PS:我在两台设备上都使用 android 2.3。


这是我解决这个问题的方法,希望对那些正在寻找的人有所帮助。关键是将 OnScrollListener 附加到列表,跟踪何时处理滑动手势以及何时到达列表末尾。然后,当投掷仍在进行时,如果系统尝试移动它,请继续将位置重置到末尾。

private ListView mListView;
private ListAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_list);

    mListView = (ListView) findViewById(R.id.listView);
    mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getList(25));
    mListView.setAdapter(mAdapter);
    mListView.setOverScrollMode(View.OVER_SCROLL_NEVER);
    if(Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD || Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD_MR1){
        mListView.setOnScrollListener(new OnScrollListener(){
            private boolean flinging = false;
            private boolean reachedEnd = false;

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                flinging = (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING);
                reachedEnd = false;
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                if(reachedEnd && flinging && (firstVisibleItem + visibleItemCount < totalItemCount)){
                    mListView.setSelection(mAdapter.getCount() - 1);
                }else if(firstVisibleItem + visibleItemCount == totalItemCount){
                    reachedEnd = true;
                }else{
                    reachedEnd = false;
                }

            }

        });
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何禁用 android 列表视图中的过度滚动和弹跳? 的相关文章

随机推荐