如何多次添加相同的视图给父母,只需一次膨胀

我有一个垂直方向的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); } 

Solutions Collecting From Web of "如何多次添加相同的视图给父母,只需一次膨胀"

你真的检查膨胀是否缓慢? 据我所知,膨胀视图非常快(几乎与手动创build视图一样快)。

听到你可能会感到惊讶,但实际上并没有parsingXML。 用于布局的XML在编译时被parsing和预处理 – 它们以二进制forms存储,使得视图膨胀效率非常高(这就是为什么不能从运行时产生的XML膨胀视图的原因)。

你不能 ,即使你试图从旧的view对象创build一个new view对象将通过引用传递不值 ,因此,你会得到一个作为childAlreadyHasParent exception ,所以,唯一的办法是把按照您希望充气的次数来view for loop ,并且此循环必须包含从开始时的创build过程,而不仅仅是充气线路。

我不确定你的观点是什么,但是你是否通过膨胀XML手动创build它:

  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); } 

但是,是的,你清楚地尝试用Simple ListView & API为你做的事情

多次充气不能以同样的方式完成单次拍摄。 希望这个作品

 LayoutInflater inflator = (LayoutInflater).getSystemService(Context.LAYOUT_INFLATER_SERVICE); 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); } 

这将工作,至less工作我