簡體   English   中英

Android ListView滾動到頂部

[英]Android ListView scrolling to top

我有一個包含自定義行的ListView 單擊任何這些行時,將重新生成ListView的數據。 當發生這種情況時,我希望列表回滾到頂部。

我最初嘗試在每一行的OnClickListener使用setSelection(0)來實現這一點但是不成功(我相信因為ListView在其數據無效時丟失了它的滾動位置 - 所以我對setSelection的調用被撤消。我仍然不明白但是,ListView決定在失效后滾動到的位置。

我所知道的唯一有用的解決方案是由Romain Guy在這里提供的: http//groups.google.com/group/android-developers/browse_thread/thread/127ca57414035301

它涉及( View.post )對_listView.setSelection(0)的調用。 我覺得這個表現很糟糕。 新生成的列表顯示其滾動位置不變,並且在滾動回到頂部之前存在相當大的延遲。

有沒有更好的方法來實現這個功能?

任何幫助將非常感激。

謝謝!

call listView.setSelectionAfterHeaderView(); 滾動到頂部

我嘗試了很多,但這個對我有用

list.smoothScrollToPosition(0);

我只使用listview.setSelection(0);

對我來說很好。

如果在更改ListView適配器的數據后需要立即滾動,請注意它可能尚未填充。 在這種情況下,你應該通過Handler post()你的setSelection()setSelectionAfterHeaderView() ,以便稍后在隊列中調用它。

listView.Handler.post(new Runnable() {
            @Override
            public void run() {
                listView.setSelectionAfterHeaderView();    
            }
        });

這對我有用。

就個人而言,我建議您找到不同的UI模式。 用戶可能會發現您當前的“點擊,並且列表更改原位 ”方法直觀,但我持懷疑態度。

您可以嘗試繼承ListView並重寫layoutChildren()以鏈接到超類,然后在需要的情況下調用setSelection(0) 如果“相當大的延遲”僅僅是由post()調用引起的,那么這應該清除它。

作為解決方法,您可以創建包含新重新生成的數據的新適配器,然后調用ListView.setAdapter。 之后調用ListView.setSelection(n)。

順便說一句,commonsware提供的解決方案是有效的。

在一些不同的要求。 如果你想像聊天一樣向上滾動。

        mListView.smoothScrollToPosition(mAdapter.getCount());

當你想從listview標題聚焦edittext時,這個工作正常

listview.setSelectionFromTop(0,0);

如果要從列表視圖中選擇特定的索引視圖

listview.setSelection(index); // o for top

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM