2012-05-07 5 views
0

немного шероховатого времени получать это на работу и его понимание часть на моем конце ...Android: Динамически добавлять кнопки после того, как элемент вертушки выбран

Если у меня есть элемент вращателя, который содержит текст «код [пункт ] is [color] ", и, выбирая это, я бы хотел, чтобы он заполнил ... tablerow или что-то в этом роде (или просто relativelayout) ... с кнопками и были бы две кнопки, [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 просто разбирает известные слова, как в [пункт] и [цвет] элементы и помещает их в массив ... для целей перечисления позже.

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

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

// ArrayList должны быть просто [пункт] и [цвет] в этой точке ...

 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 

и кнопки не появляется ... приложение просто падает ... в гору.

помощь очень ценится ... Спасибо всем!

ответ

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 с НОВЫМ представлением. Вы можете добавить несколько новых представлений в один вид, но вы не можете добавить это одно изображение несколько раз.

Это то, что я нашел в другом посте

+0

Эй, спасибо за ответ на это. В конце концов, я понял, что после нескольких минут подумать о проблеме немного глубже. Я обнаружил, что только использование t1.addView (btn, new params ... blah blah) работало, но все остальное не было необходимо так или иначе. Я определенно принимаю этот ответ, хотя, большое вам спасибо за ваш совет! –

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]); 
} 
+0

Спасибо за ваш ответ, я не нужно ничего менять с помощью кнопок, она, казалось, это просто отлично. Это просто вопрос, чтобы вытащить их в TableView. Еще раз спасибо! –

Смежные вопросы