向LinearLayout添加多个视图的最快方法是什么?

zeh*_*zeh 16 layout android view inflate android-linearlayout

我有一个LinearLayout已经包含几个元素的视图.我想以编程方式添加更多视图.因为这是在一个内部ScrollView,一切都将滚动.

所以我要做的就是浏览我的列表,并将自定义View的新实例添加到其中.该自定义视图会扩展XML布局并添加一些方法.

这种方法效果很好.问题是它的速度非常慢,即使没有任何疯狂的代码......一个包含10个项目的列表需要大约500ms才能实例化.从用户体验的角度来看,这很难被接受.

我的问题是,这是正确/最好的方法吗?虽然"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);       
}
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要完成的是这个.考虑这个布局:

基本布局

这个布局是一个FrameLayout(外框),包含一个ImageView(灰色),一个TextView(内部矩形,顶部)和一个LinearLayout(内部矩形,底部).这个LinearLayout矩形是我用几个项目动态填充的矩形.

在我填充它之后,我希望最终结果是这样的(每个新矩形都是一个新MyListItem实例):

填充布局

也就是说,一切都是可滚动的(例如,背景图像在顶部对齐).该LinearLayout本身不是滚动(一切如下),因此为什么ListView,据我所知,也不会在我的情况很好地工作.

Fun*_*onk 7

3选项:

  1. 使用ListView替换所有内容,将其他父级和自定义图标替换为ListView的标题视图.ListView更快,因为它只在需要时创建视图.

  2. 以编程方式创建my_list_item的内容而不是膨胀,可能会更快

  3. 使用ViewStubs可以允许您按需加载视图.

  4. 也许它不是加载视图而是加载数据?在这种情况下,在后台线程中准备数据.