2017-01-09 3 views
2

私はListViewをかなり高く複雑な項目がありますが、それほど極端ではありません。各項目は、さまざまな行数のCardViewです。複雑な項目でListViewのパフォーマンスを最適化する

残念ながら、スクロールを完全に滑らかにすることは非常に難しいようです。

リダイレクトされたビューを返す以外は、アダプタのgetView()メソッドがほとんど何もしなくても、16msを超えるフレームがあります。

スローフレームは、アイテムが無効にされ、ユーザーがスクロールするときにキャッシュに描画されるため(私が想定しているように)他のフレーム(8msなど)よりも描画時間が大幅に遅くなります。

scrolling_cachefalseに設定しようとしましたが、役に立たなかったです。 RecyclerViewを使用しても、パフォーマンスは向上しませんでした。

+0

あなたは 'RecyclerView'で試してみませんか? –

+0

すぐに投稿を更新しようと思います。 – fhucho

+0

@NJは役に立たなかった – fhucho

答えて

0

まず、ListViewは、複雑なレイアウトを持つべきではありません。 ListViewの項目を展開することができれば、それを行う方法は他にもあります。この目的でExpandableListViewを使用することを検討してください。

しかし、あなたのリスト項目が複雑なので、私は以前同様の状況で走っていました。リスト項目のレイアウトをできるだけ単純にしなければなりませんでした。 LinearLayoutのすべてをRelativeLayoutに置き換えて、Viewの階層を減らしました。

リスト項目(CardView)に画像が含まれている場合は、既に画像を読み込むためにGlideまたはPicassoを使用している可能性があります。

私が一度使ったもう一つのトリックは、での飛行スクロールを検出することでした。複雑なリスト項目にはonScrollListenerを使用しました。

@Override 
public void onScrollStateChanged(AbsListView absListView, int scrollState) { 
    if(scrollState != SCROLL_STATE_FLING) { 
     // Populate views here 
    } 
} 

getView関数内のデータベース呼び出しやループは避けてください。あなたはすでにそれらを考慮したかもしれません。私はちょうど私の考えをすべて入れています。

関連する問題