2012-05-08 7 views
0

다음과 같이 동적으로 컨테이너 패널에 뷰를 추가하는 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(); 
} 

감사


업데이트 : 문제가 Aegonis 지적으로 인해 스레드 코드 것으로 보인다.

답변

1

시도 ViewGroup.addView() (FrameLayout, GridLayout, LinearLayout ...은 모두 ViewGroup의 확장입니다.)

예를 들어, 당신은보기 최초의 기존보기 후 삽입하려면 :

LinearLayout layout = (LinearLayout) findViewById(R.id.layoutID); 
layout.addView(viewToBeAdded, 1); 
+0

나뿐만 아니라 'containerPanel'와 'BoarPanel'에 대한의 LinearLayout을 사용했다. 내 활동이 이미 시작되고보기가 표시됩니다. 그러나 나중에 사용자가 단추를 클릭 할 때 컨테이너에보기를 추가하려면 addView에 멈춰서 불가능할 수도 있음을 의미합니다. 또한 사용자가 다른 버튼을 클릭 할 때 컨테이너의 모든보기를 지우고 싶습니다. 안드로이드에서 이런 일을 할 수 있습니까? – user1382302

+0

당신이 묘사하는 것은 실제로 완벽하게 가능해야합니다. 나는 문제가 당신이 제공하는 코드에 없다고 생각한다. 이 모든 것이 메인 (UI) 스레드에서 발생합니까? LogCat에 더 많은 정보를 제공 할 수있는 예외 또는 메시지가 있습니까? 그렇다면 : 게시물을 업데이트하십시오. 문제 해결에 도움이됩니다. – gleerman

+0

대단히 감사합니다! 실제로 저는 문제가되었던 스레드 된 코드를 사용했습니다. 하지만 자바 코드를 사용하는 이유는 궁금하다. invokeLater를 수행하지는 않았지만. runOnUIthread를 추가 한 후 안드로이드 코드가 작동했습니다. – user1382302

관련 문제