我有一个LinearLayout
已经包含几个元素的视图。我想以编程方式向它添加更多视图。因为这是在 a 里面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
实例):
也就是说,一切都是可滚动的(例如,背景图像在顶部对齐)。TheLinearLayout
本身不可滚动(其他所有内容都随之而来),因此据ListView
我所知,为什么 a 不能在我的情况下很好地工作。