2013-11-02 1 views
1

나는 최근에 탭으로 놀았으며 여기에 문제가있다. 다음주기는 동적 레이아웃이있는 동적 탭을 만듭니다. 그러나, 내가 첫 번째 탭 콘텐츠를 만들 때만 두 번째 탭을 선택하려고하면 응용 프로그램을 실행할 때 두 번째 탭 내용이 만들어집니다.안드로이드 : createTabContent가 모든 탭에서 내용을 생성하도록 강제하는 방법은 무엇입니까?

두 번째 탭 레이아웃에 즉시 액세스하고 싶습니다. 두 번째 탭을 선택하기 전에 첫 번째 탭에서이를 시도하면 응용 프로그램이 충돌합니다.

Tabs = (TabHost) findViewById(android.R.id.tabhost); 
    Tabs.setup();  
     for (count =0;count < all_rooms_count;count++){ 
     NewTab.setContent(new TabHost.TabContentFactory() 
      { 

       public View createTabContent(String tag) 
       { 
        RelativeLayout ll = new RelativeLayout(MainActivity.this); 
        ll.setLayoutParams(params); 
        ll.setId(passedTabId); 

        return ll; 
       } 
      }); 

      Tabs.addTab(NewTab); 
     } 

은 모든 탭 에 대한 탭 콘텐츠를 만들주기를 강제 할 수 있습니까?

답변

0

먼저 모든 탭에 대해 별도의 TabContentFactory를 생성하기 위해 중복되었습니다. TabContentFactory의 한 인스턴스를 유지하고 모든 탭에 사용하는 것이 좋습니다.

탭 내용은 createTabContent 메소드 내에서만 만들 필요는 없습니다. 한 번에 (심지어 외부에서) 모든보기를 작성하고 해당 탭을 선택했을 때 리턴 할 수 있습니다.

RelativeLayout l1=..; 
RelativeLayout l2=..; 
RelativeLayout l3=..; 
RelativeLayout l4=..; 

TabContentFactory factory=new TabContentFactory(){ 

public View createTabContent(String tagId){ 

if(tagId.equals(TAG1)) 
    return l1; 
}else if(tagId.equals(TAG2)){ 
    return l2; 
}else if(tagId.equals(TAG3)){ 
    return l3; 
} 
};