LinearLayout
すでにいくつかの要素を含むビューがあります。プログラムで、さらに多くのビューを追加したいと考えています。これは 内にあるためScrollView
、すべてがスクロールされます。
したがって、リストを調べて、カスタム ビューの新しいインスタンスをリストに追加します。そのカスタム ビューは XML レイアウトを拡張し、いくつかのメソッドを追加します。
このアプローチはうまく機能します。問題は、クレイジーなコードがなくても非常に遅いことです... 10 個のアイテムを含むリストをインスタンス化するのに約 500 ミリ秒かかります。ユーザー エクスペリエンスの観点からすると、これは受け入れがたいものです。
私の質問は、これは正しい/最善のアプローチですか? 「R.layout.my_list_item」は非常にシンプルですが、Android ではレイアウトの拡張に時間がかかるようです。「膨張した」レイアウトを追加のビューに再利用して、より複雑な解析をキャッシュする方法があるのだろうか?
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);
}
マイリスト項目:
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
私が知っていることから、私の場合は a がうまく機能しないのはなぜですか。