2

FragmentTabHost을 사용하는 활동이 있으므로 각 탭에 조각이 있습니다. 첫 번째 탭에서 두 개의 중첩 된 조각이 있는데 하나는 화면의 위쪽 절반에 있고 다른 하나는 아래쪽 절반에 있습니다. 하단의 단편은 ViewPager을 사용하여 여러 개의 LinearLayouts을 스캔합니다. 그것은 모두 잘 작동합니다.FragmentTabHost, 중첩 된 단편 및 ViewPager

다른 탭으로 이동하여 처음으로 돌아갈 때까지. 맨 아래의 중첩 된 조각은 더 이상 나타나지 않지만 위에있는 조각은 나타납니다.

다음
public class MainActivity extends SherlockFragmentActivity 
{ 
    private FragmentTabHost mTabHost; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main_activity_layout_vert); 

     mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); 
     mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

     mTabHost.addTab(mTabHost.newTabSpec("TAB1").setIndicator("", getResources().getDrawable(R.drawable.tab1_selector)), Tab1Fragment.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("TAB2").setIndicator("", getResources().getDrawable(R.drawable.tab2_selector)), Tab2Fragment.class, null); 
    } 
} 

내가 TAB1의 조각을 사용하고 있습니다 방법은 다음과 같습니다 :

이것은 내가 내 주요 활동을 사용하고 방법은 다음과 같습니다

은 여기 내 사용을 보여주는 몇 가지 코드의

public class Tab1Fragment extends SherlockFragment 
{ 
    private NestedFragment1 mNestedFrag1 = null; 
    private NestedFragment2 mNestedFrag2 = null; 


    @Override 
    public void onCreate(Bundle inSavedInstanceState) 
    { 
     super.onCreate(inSavedInstanceState); 

     mNestedFrag1 = new NestedFragment1(); 
     mNestedFrag2 = new NestedFragment2(); 

     FragmentManager fragManager = getChildFragmentManager(); 
     FragmentTransaction fragTransaction = fragManager.beginTransaction(); 

     fragTransaction.add(R.id.nested_frag1_container, mNestedFrag1, "Frag1"); 
     fragTransaction.add(R.id.nested_frag2_container, mNestedFrag2, "Frag2"); 
     fragTransaction.commit(); 
    } 

    @Override 
    public void onDestroy() 
    { 
     FragmentManager fragManager = getChildFragmentManager(); 
     FragmentTransaction fragTransaction = fragManager.beginTransaction(); 

     fragTransaction.remove(mNestedFrag1); 
     fragTransaction.remove(mNestedFrag2); 
     fragTransaction.commit(); 
    } 
} 

그리고 두 번째 중첩 된 조각 (사라지는 조각)을 사용하는 방법은 다음과 같습니다.

public class NestedFragment2 extends SherlockFragment 
{ 
    private MyPageAdapter mPageAdapter; 
    private ViewPager mViewPager; 

    @Override 
    public void onCreate(Bundle inSavedInstanceState) 
    { 
     super.onCreate(inSavedInstanceState); 

     mPageAdapter = new MyPageAdapter(); 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View toReturn = inflater.inflate(R.layout.nested_fragment1_layout_top, container, false); 

     mViewPager = (ViewPager)toReturn.findViewById(R.id.viewpager); 
     mViewPager.setAdapter(mPageAdapter); 
     mViewPager.setOffscreenPageLimit(5); 

     return toReturn; 
    } 

    private class MyPageAdapter extends PagerAdapter 
    { 
     @Override 
     public Object instantiateItem(ViewGroup container, int position) 
     {   
      View page = getActivity().getLayoutInflater().inflate(R.layout.view_pager_controls_layout, container, false); 

      container.addView(page); 

      return page; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) 
     { 
      container.removeView((View)object); 
     } 

     @Override 
     public int getCount() 
     { 
      return 5; 
     } 

     @Override 
     public float getPageWidth(int position) 
     { 
      return 1; 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) 
     { 
      return(view == object); 
     } 
    } 
} 

생각 하시겠습니까?

답변

0

다른 탭으로 이동할 때 소멸되는 것처럼 들립니다. ViewPager.setOffscreenPageLimit()을 높은 수로 설정하여 여전히 발생하는지 확인하십시오.

+0

이미 5로 설정 중입니다. 오해 할 가능성이 있습니까? 뷰 페이지는 탭과 관련이 없습니다. 첫 번째 탭 안의 중첩 된 조각에 사용됩니다. – KairisCharm

+0

2 중첩 된 조각을 구현하는 방법을 알아야합니다. – Dororo

+0

내 게시물을 내 게시물을 참조하십시오. – KairisCharm

0

아마도 활동에서 얻은 것 대신에 중첩 된 조각에 childFragmentManager를 사용해야하기 때문일 가능성이 큽니다. 당신이 거 거래를 할 때마다 "최고 수준의"조각에서

내가 그것을 알아 냈 대신 getFragmentManager()

+0

죄송합니다. 방금 내 코드를 게시했습니다. 보시다시피, ChildFragmentManager를 사용하고 있습니다. – KairisCharm

0

의 중첩 된 조각 사용 getChildFragmentManager()을 포함합니다. 위의 코드는 문제가 아닙니다. 문제는 PagerAdapter 인플레이션을 처리하는 방식과 관련이 있습니다. 나는 내가 위에서 보여준 것과 정확하게 똑같이하지는 않았다. 제가 실제로 사용하고있는 방식은 전망의 팽창을 막는 것입니다.