mks*_*kso 34 layout android view add inflate
我有一个垂直方向的LinearLayout作为父级,我想以编程方式多次向该父级添加一些视图.现在,每次在添加到父元素之前获取对每个UI元素的新引用时,我都会给孩子充气.这似乎不是非常有效,有没有更好的方法来做到这一点.
我正在使用的当前代码如下,如果我在循环之前只膨胀一次我得到运行时错误"他指定的孩子已经有父.你必须首先在孩子的父母上调用removeView()."
LayoutInflater inflator = LayoutInflater.from(getBaseContext());
LinearLayout parentPanel = findViewById(R.id.parent_pannel);
ArrayList<String> myList = getData();
for(String data : myList) {
// inflate child
View item = inflator.inflate(R.layout.list_item, null);
// initialize review UI
TextView dataText = (TextView) item.findViewById(R.id.data);
// set data
dataText.setText(data);
// add child
parentPanel.addView(item);
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*iuk 28
你真的检查过充气是否缓慢?据我所知,膨胀视图非常快(几乎和手动创建视图一样快).
你可能会听到令人惊讶的事实,但实际上膨胀根本不解析XML.布局的XML在编译时被解析和预处理 - 它们以二进制形式存储,这使得视图膨胀非常有效(这就是为什么你不能从运行时生成的XML中扩展视图的原因).
我不确定你的观点是什么,但你是否通过膨胀XML手动创建它:
ArrayList<String> myList = getData();
for(String data : myList) {
LinearLayout layout = new LinearLayout(this);
layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
TextView textView = new TextView(this);
textView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
textView.setText(data);
layout.addChild(textView);
parentPanel.addView(layout);
}
Run Code Online (Sandbox Code Playgroud)
但是,你明确尝试使用Simple ListView和API为你完成的事情
你不能,即使你试图new view从旧view对象创建一个对象将通过引用传递而不是值,因此你将得到一个Exception作为childAlreadyHasParent,所以,唯一的方法是把它view放入一个for loopwith您希望它膨胀的次数,并且此循环必须包含从开始而不仅仅是膨胀线的创建过程.
| 归档时间: |
|
| 查看次数: |
24029 次 |
| 最近记录: |