2016-05-24 4 views
-1

У меня проблема с динамическим добавлением линейного макета в контейнер linearlayout после того, как пользователь нажал кнопку.Динамически добавлять LinearLayout в LinearLayout

private void AddView() { 
    MyView myView1 = new MyView("Name"); 
    this.mainLinearLayout.addView(myView1); 
} 

Этот код отлично работает в режиме onCreate, но не после обработки пользовательского события.

У вас есть идеи, почему он не работает? (Я имею в виду на пользовательском интерфейсе ничего не появляется)

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    AddView(); => works great 
} 

playButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     AddView(); => not working 
    } 
}); 

Спасибо,

+0

Вы уверены, что нажата кнопка onclick? –

+0

Как выглядит playButton.setOnClickListener вне onCreate()? –

+0

@TomerShemesh Да, я поставил точку останова, и она ломается .. Ну, я действительно не понимаю, почему это не работает! –

ответ

0

Я думаю, что AddView неправильно.

private void addView() { 
    LayoutParams lparams = new LayoutParams(
     LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
    MyView myView1 = new MyView("Name"); 
    myView1.setLayoutParams(lparams); 
    this.mainLinearLayout.addView(myView1); 
} 
+0

Ну, вы не ошиблись, но я установил layoutParams внутри класса MyView! –

+0

Правильно добавьте один и тот же вид, почему бы не создать список и не использовать адаптер списка, который принимает в качестве элемента ваш класс MyView, который, как я полагаю, расширяет представление, и когда вы хотите добавить новый, вы просто скажете, что адаптер увеличится на 1 размер его элементов, а затем вы notifyDataSetChanged() –

+0

Да, это может сработать для использования списка и адаптера. Я попытаюсь проверить, работает ли он лучше! –

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