すでにいくつかの要素が含まれているLinearLayout
ビューがあります。私はプログラムで多くのビューを追加したいと思います。これはScrollView
の内部にあるため、すべてがスクロールされます。LinearLayoutに複数のビューを追加する最も簡単な方法は何ですか?
私の行うことは、私のリストを見て、私のカスタムビューの新しいインスタンスを追加することです。そのカスタムビューはXMLレイアウトを拡張し、いくつかのメソッドを追加します。
このアプローチはうまくいきます。問題は、狂ったコードがなくてもスローであることです... 10項目のリストは、インスタンス化するのに500msほどかかります。ユーザーエクスペリエンスの観点から、これは飲み込むのが難しいです。
私の質問は、正しい/最良のアプローチですか? Androidは、「R.layout.my_list_item」がシンプルであっても、レイアウトを膨らませるのに多くの時間がかかるようです。追加のビューのために "膨らんだ"レイアウトを再利用する方法があるのだろうか、もっと複雑な解析をちょっとキャッシュするのだろうか?
私はこれをListView
(とアダプタとラッパー)で実行しようとしましたが、はるかに高速です。問題は私が単純なものを使うことができないということです。ListView
;私のレイアウトは単純なリストよりも複雑です(LinearLayout
自体には追加のカスタムアイコンが含まれていますが、それはScrollView
で囲まれる前にさらに多くのビューを持つ別の親を持っています)。
しかし、LinearLayoutにアダプタを使用する方法はありますか?ビューを自分で追加しようとするよりも速いでしょうか?
何か助けていただければ幸いです。私はこれをより速くしたいと思います。
コードが続きます。
主な活動:
// The LinearLayout that will contain everything
lineList = (LinearLayout) findViewById(R.id.lineList);
// Add a lot of items for testing
for (int i = 0; i < 10; i++) {
addListItem("Item number " + i);
}
protected void addListItem(String __title) {
MyListItem li;
li = new MyListItem(this);
li.setTitle(__title);
lineList.addView(li);
}
MyListItem:
public class MyListItem extends RelativeLayout {
protected TextView textTitle;
public MyListItem(Context __context) {
super(__context);
init();
}
public MyListItem(Context __context, AttributeSet __attrs) {
super(__context, __attrs);
init();
}
public MyListItem(Context __context, AttributeSet __attrs, int __attrsdefStyle) {
super(__context, __attrs, __attrsdefStyle);
init();
}
protected void init() {
// Inflate the XML layout
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_list_item, this);
// Create references
textTitle = (TextView)findViewById(R.id.textTitle);
}
public void setTitle(String __text) {
textTitle.setText(__text);
}
}
私が達成しようとしている何がこれです。このレイアウトを考える:
このレイアウトはFrameLayout
(外箱)である(底部に、内側の長方形)ImageView
(グレー)、TextView
(上内側の長方形)とLinearLayout
を含みます。このLinearLayout
の四角形は、私が動的にいくつかの項目を設定しているものです。
私はそれを移入した後、私は最終的な結果は、この(すべての新しい矩形が新しいMyListItem
インスタンスである場合)になりたい:
つまり、すべてがために、(背景画像のスクロール可能です例、上に揃えてあります)。 LinearLayout
はそれ自身ではスクロールできません(それ以外のものはすべて)。なぜ私が知っているところからListView
がうまく動作しないのでしょうか 私の場合です。
あなたはそのアクティビティにいくつの要素がありますか?また、UI要素を継承したカスタマイズされたクラスを持っていますか? –
リストビューはとても速いので、アイテムレイアウトをリサイクルします。彼らは、画面を埋めるために必要なアイテムレイアウトの数を膨らませます。下にスクロールすると、一番上のビューが非表示になり、一番下のビューが表示されます。リストビューは古いものから見えないものを上から取り出し、新しいデータを下に置きます。高価なインフレを避ける。全体的:これはここでは非常に非効率的なように見えますが、あなたがやりたがっていることがリストビューで達成できることは確かです。あなたが試したことを示し、意図したレイアウトのスケッチを投稿すれば、それを理解するのに役立ちます。 –
Paul:多くの要素がありません。多分4または5です。はい、それらのいくつかは、基本的なフレームワークを継承するカスタムクラスです。 alextsc:説明をいただきありがとうございます。私は自分の状況をよりよく説明する図を追加したので、代わりにListViewを使用するかどうかは明らかです。 – zeh