2016-04-11 6 views
0

これは非常に特殊なケースですので、この質問を適切に整理するために最善を尽くします。私は私の目的のために働いているカスタムViewGroupを持っていますが、初期化はスキップされたフレームを引き起こしています。Androidを使用するViewGroup

私のアプリはFragmentViewPagerを含んでいます。それぞれの親コンテナはScrollViewです。これらの中で、私は多くの異なったビューを持っています。一つは、(データセットを操作するための)カスタムビューの垂直な行を含むLinearLayoutです。写真で見る「フォアグラウンド、可視、セカンダリアプリのこのレイアウトの

は、私がLinearLayoutを拡張しましたし、それぞれは、XMLからそれぞれの子を膨らませる、実行時に移入されます。

問題なく動作していますが、実行時にこれらの子ビューをすべて膨張させるとフレームがスキップされるという問題があります。私はLayoutInflater.inflate()への各呼び出しが4-6ミリ秒かかることを見つけるためにメソッドトレースを使用しました。これらのリストのうちの1つ以上を含んでいる私のすべての断片の間では、起動時にフレームをスキップするとかなりの量(40〜50)になります。

膨張する代わりに手動で子ビューを作成すると、少し改善されましたが、十分ではありません。まだ非常に目立つフレームスキップ。

ListViewの場合と同様に、再利用するビューが必要です。

私は1つの解決策を見ますが、それは全く理想的ではないようです。 フラグメントコンテナScrollViewListViewに置き換え、複数のビュータイプを使用することです。私はこれを見

いくつかの問題が

  • それは上記、下記のビュー間の最大5-6異なるビュータイプを必要とする

    、およびこれらのリストの間にあります。書くのが面倒です。
  • 各子ビューには、単純な展開/折りたたみアニメーションで垂直方向にサイズを拡張する機能が必要です。これがListViewの行でも可能であるかどうかは不明です。
  • これは、アプリ全体のほとんどを書き換えます。私はこれをやりたいが、できるだけ避けたいと思っている。

私はそれを行うには、可能な限りであると思った:、代わりにこれらのリストのためのLinearLayoutを使用しての

  • ListViewを使用し、その大きさは、すべての項目を表示するように拡張することがあります。それは親の中にネストされますScrollView。そのサイズがすべてのアイテムに拡大された場合は、ビューを再利用しますか?

この状況で使用できる他のタイプの容器はありますか?私は新しいRecyclerViewをまだ使用していませんが、私が読んだことは本質的にはListViewと同じです。

基本的に私が作成しようとしているのは、ビューをリサイクルするLinearLayoutです。

ご意見をお寄せいただきありがとうございます。この質問がうまく読めない場合は、私にお知らせください。必要に応じて、情報を追加したり、コードを投稿したりすることができます。私がここでやろうとしていることは、ちょっと変わったことであり、本質的に設計上の欠陥があるかもしれない。しかし、私はそれが現在提示されている方法にとても満足しており、このようにしたいと思います。

答えて

0

クリックしたときに内部レイアウトが表示/非表示になるクリック可能なタイトルビューがあります。

このように、内部レイアウトなしでビューを膨張させることができます。クリック可能なタイトルのみ。タイトルをクリックすると、対応する内部レイアウトがまだ膨張していない場合は、それを膨張させます。それ以外の場合は、表示/非表示にします。それは最初のインフレから多くの時間を節約するはずです。また、xmlを拡張するのではなく、実行時にプログラムでレイアウトを作成すると、かなりコストがかかるfindViewById()メソッドを使用する必要がないので、時間も大幅に節約できます。

+0

素晴らしい提案です。私はこれをできるだけお試しください。 –

+0

あなたの状況に役立つ場合は、回答を受け入れたものとしてマークしてください。 – Anonymous

+0

私はまだこのフレームをスキップしています。私は別の考えを持って、ワーカースレッドでこれらのビューを膨らませ、 'onPostExecute'で親にアタッチしました。それは私のデバイス上で完璧に動作します、何かこのようにそれに間違っている? –

関連する問題