0

让它工作起来有点艰难,这对我来说是一个理解的部分......

如果我有一个包含文本“[item] is [color]”的微调器项目,并且在选择它时,我希望它填充一个...... tablerow 或类似的东西(或只是一个相对布局)......按钮,会有两个按钮,[item] 和 [color],一个在另一个上。

public void onItemSelected(AdapterView<?> parentview, View arg1, int position, long id) 
{

    final TableLayout t1 = (TableLayout)findViewById(R.id.button_items);
    final TableRow tr = new TableRow(t1.getContext());
ArrayList<String> words = Create_ArrayList(R.raw.titles);  

// Create_ArrayList 只是解析已知的单词,如 [item] 和 [color] 项目,并将它们放入一个数组中......以便稍后进行枚举。

String sentence = (String) spin.getSelectedItem();

    if(sentence.contains("[item]"))
    {
        String line = words.get(1);
        ArrayList<String> x = getParts(line);  

//arraylist 此时应该只是 [item] 和 [color] ...

        Toast.makeText(getBaseContext(), Integer.toString(x.size()), Toast.LENGTH_SHORT).show();
    for(int i = 0; i<x.size(); i++)
    {
              Toast.makeText(getBaseContext(), x.get(i), Toast.LENGTH_LONG).show();

            Button btn = new Button(tr.getContext());
       btn.setText(x.get(i));
       btn.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
       tr.addView(btn);
       t1.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    }   
}
}

但我不断...

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first

并且按钮不显示......应用程序只是崩溃......进入一座山。

非常感谢您的帮助...谢谢大家!

4

2 回答 2

1

这是因为您将相同的按钮一遍又一遍地添加到同一个表格行中。你可以使用一系列按钮,

btns = new Button[]{button1, button2, etc...} 

然后说:

for(int i = 0; i < x.size() ; i++ ){
     btn[i] = new Button(tr.getContext());
     btn[i].setText(x.get(i));
     tr.addView(btn[i]);
}
于 2012-05-07T04:51:49.047 回答
1

在第一个代码块中

final TableLayout t1 = (TableLayout)findViewById(R.id.button_items);

您已经拥有 t1 的视图,但在第三个代码块中您再次添加了视图

tr.addView(btn);
       t1.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

这就是你例外的原因。

当一个视图已经被使用时(例如,你用 findViewById 得到它,不要在它上面使用 addView)。当您想要添加视图时,请将 addView 与 NEW 视图一起使用。您可以将其中几个新视图添加到一个视图中,但不能多次添加该视图。

这是我在其他帖子中发现的

于 2012-05-07T06:10:26.720 回答