У меня есть приложение java, которое динамически добавляет представления в панель контейнера следующим образом.android: динамически добавлять компоненты в макет
void addBoard(int ID) {
BoardPanel p = new BoardPanel(myManager,ID);
setAutoLayout();
containerPanel.add(p);
containerPanel.repaint();
}
Когда я пытаюсь преобразовать это в приложение Android, оно зависает при вызове addView. В чем проблема? Обратите внимание, что пользователь может добавить 1000 просмотров (BoardPanels), если ему это нравится, поэтому я не могу использовать XML-макеты.
void addBoard(int ID) {
BoardPanel p = new BoardPanel(context,myManager,ID);
Log.i("Info", "Going to add view");
containerPanel.addView(p);
Log.i("Info", "Added");
containerPanel.postInvalidate();
}
Благодаря
Update: Проблема, кажется, из-за шитый код, как Aegonis указал.
Я использовал LinearLayout для «containerPanel» и «BoarPanel» а. Моя активность уже началась, и просмотры отображаются. Но позже, когда я хочу добавить больше просмотров в контейнер, когда пользователь нажимает кнопку, он зависает на addView, что означает, что это может быть невозможно. Я также хочу очистить все представления в контейнере, когда пользователь нажимает на другую кнопку. Можно ли делать такие вещи в андроиде? – user1382302
То, что вы описываете, должно быть действительно возможно. Я думаю, что проблема не в коде, который вы предоставляете. Все это происходит в основном потоке (UI)? Есть ли в вашем LogCat исключение или сообщение, которое может предоставить дополнительную информацию? Если да: пожалуйста, обновите свой пост, он поможет нам/другим решить вашу проблему. – gleerman
Большое спасибо! В самом деле, я использовал многопоточный код, который был проблемой. Но мне интересно, почему он работал с Java-кодом, хотя я не делал invokeLater на нем. Код Android работал после того, как я добавил runOnUIthread. – user1382302