2014-10-15 3 views
1

단편에 중첩 된 FragmentTabHost를 생성하려고합니다. 나를 미치게 만드는 한 가지를 제외하고는 개념이 작동하고 있습니다. .addTab() 방법이 같은 제 2 인수로 동적으로 생성 fragment.getClass 수득 다음 .newInstance() 메소드동적으로 생성 된 단편으로 중첩 된 FragmentTabHost에 탭 추가

mTabHost.addTab(
      mTabHost.newTabSpec("Tab1").setIndicator(adapterlist[0], null), 
      SiteDetailsFragment.newInstance(test1).getClass(), null); 

를 상기 TEST1 인수 ArrayList를, 그리고 단편 동적를 만드는 목록에 포함 된 데이터가있는 각 행의 TextViews 및 EditTexts가있는 Tablelayout. adapterlist []는 간단한 문자열 배열입니다.

괜찮습니다.

문제는 :이 같은 다른 SiteDetailsFragment 인스턴스에서 더 많은 탭을 만들려면 :

 for (int i=0;i<=currentDetailsList.size()-1;i++) { 

     mTabHost.addTab(mTabHost.newTabSpec("tab" + i) 
     .setIndicator(adapterlist[i], null), 
     SiteDetailsFragment.newInstance(currentDetailsList 
     .get(i)).getClass(),null); 

     } 

currentDetailsList 목록의 목록입니다, 인스턴스 사이의 차이는 .newInstance에서 주어진 목록 (이다) 방법. 이주기는 currentDetailsList에 의해 정의 된 정확한 탭 수를 만들지 만 모든 탭의 내용은 마지막 목록 항목에 의해 생성 된 인스턴스이며 그 이유는 알지 못합니다. 나는 많은 것을 시도했지만, 아마 나는 뭔가를 놓치고 있습니다. 제안 사항이 있으면 누구나 읽고 싶습니다.

감사합니다.

답변

0

SiteDetailsFragment의 새 인스턴스를 만들었지 만 근본적으로 멀리 던져서 문제가 발생할 수 있습니다. 내 생각 엔 귀하의 SiteDetailsFragment.newInstance()이 정적 데이터를 저장하고 있다는 것입니다. 원하는 것은 ArrayListBundle에 넣고 클래스 이름을 .addTab()으로 지정하십시오. 예를 들어 :

Bundle args = new Bundle(); 
args.putStringArrayList(ARG_NAME, test1); 
mTabHost.addTab(mTabHost.newTabSpec("Tab1").setIndicator(adapterlist[0], null), 
    SiteDetailsFragment.class, 
    args); 

이것은 당신의 test1 목록 String 개체의 목록 그냥이라고 가정한다. Parcel에 의해 지원되는 다른 것이라면 올바른 Bundle 메서드를 사용하여 추가해야합니다.

addTab() 방법은 당신이뿐만 아니라 인수로 제공 Bundle 설정으로 제공 클래스 (이름)의 새로운 Fragment 개체를 만들 수 Fragment.instantiate() 방법을 사용합니다; 수동으로 작성하는 일반적인 newInstance() 메소드와 동일합니다.