2011-06-09 55 views
8

我有一個Android ListView,它每隔一秒左右就會有一個小的(比如說1-5幀)斷續,因爲它正在滾動。我意識到很多Android手機在動畫平滑度方面存在這些問題,但是,在我的手機(運行Android 2.2的摩托羅拉A855)上,本地聯繫人列表滾動得非常順利。在聯繫人列表中的項目視圖比我的列表中的項目來看,這是比較複雜的:改善Android ListView中的滾動平滑度

<RelativeLayout> 
    <TextView /> 
    <TextView /> 
</RelativeLayout> 

我只是想實現平滑的本地聯繫人列表一樣好。看起來,這應該是可能的,而不是優化本地代碼,但也許我錯了。

我已經嘗試了幾件事情:我進一步簡化了項目視圖,並試圖以編程方式實例化它而不是使用XML。我也試圖改變我對項目的點擊事件作出反應的方式,按照這個鏈接:

http://groups.google.com/group/android-developers/browse_thread/thread/7dc261a6b382ea74?pli=1

這些事情沒有人可以對性能有任何影響。

有什麼我可以在我的應用程序來提高性能?我正在考慮將此應用程序部署到多個手機,因此更改手機設置或設備生根不是我的選擇。這裏是我的適配器類的getView方法:

public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater flater = (LayoutInflater)context.getSystemService(ListActivity.LAYOUT_INFLATER_SERVICE); 
     layout = flater.inflate(R.layout.song_view, parent, false); 
     TextView first = (TextView)layout.findViewById(R.id.firstLine); 
     TextView second = (TextView)layout.findViewById(R.id.secondLine); 

     Thing t = array.get(position); 
     first.setText(t.title); 
     second.setText(t.name); 
     return layout; 
    } 

在此先感謝!

+0

提供了有關您的適配器的一些信息 – Selvin 2011-06-09 13:55:56

+0

您應該至少閱讀官方的Android指南。 它被稱爲Viewholder模式。 – Singgum3b 2013-12-01 13:00:52

回答

6

很難知道爲什麼在沒有看到您的代碼的情況下可能會發生這種情況。

但是,您需要查看的一個地方是您的ListAdapter中的getView()方法(假設您使用的是自定義適配器)。嘗試並重新使用作爲參數傳遞給此方法的視圖,而不是每次都創建一個新視圖。在這種方法中也不要做太重的事情(例如網絡調用),實際上儘量讓它儘可能精簡併且意味着最好的性能。

+2

「嘗試並重新使用作爲參數傳遞給此方法的視圖,而不是每次都創建一個新視圖」。這原來就是問題所在。我希望這可以幫助其他人認爲convertView參數只是爲了方便。我已將原始的破解代碼添加到問題中,以便人們可以看到我的錯誤。 Mark Allison,你是一個(奇怪的,可怕的)計算機神。 – charleslparker 2011-06-10 00:49:17

+0

如果我將SimpleCursorAdapter與第二個未棄用的構造函數一起使用,那麼怎麼辦?我應該擴展它還是應該開箱即用? – theblang 2013-11-20 16:10:47

+0

它將使用自動回收視圖。如果你重寫getView(),你需要處理視圖回收。 – 2013-11-21 11:59:47

3

你有沒有試過高效適配器 http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

從我的角度來看,動漫平滑的問題是由於在後臺運行的垃圾收集器。如果你正在創建大量的對象,那麼你會看到ListView滾動滯後。

希望得到這個幫助。

+0

原始鏈接已棄用,請嘗試以下操作:http://www.linuxtopia.org/online_books/android/devguide/guide/samples/ApiDemos/src/com/example/android/apis/view/List14.html – Brett 2013-10-01 14:47:03