1

XML을 부 풀려서 View Pagers를 내 앱에 동적으로 추가하려고합니다. 모든보기 호출기와 해당 어댑터가 올바르게 인스턴스화되고 필요한 조각도 첨부됩니다. 그러나 첫 번째보기 호출기의 조각 만 볼 수 있습니다. 다른 뷰 호출기의 경우 한 조각에서 다음 조각으로 스 와이프 할 수도 있습니다. 그들은 단지 보이지 않습니다. Android : 첫 번째 ViewPagers를 제외한 모든 것 보이지 않음

public class MainActivity extends FragmentActivity { 
    private static Integer NUM_PAGERS = 2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //get layout inflater 
     LayoutInflater inflater = LayoutInflater.from(this); 
     LinearLayout fragmentPagerLayout = (LinearLayout)  findViewById(R.id.linearLayoutMain); 

     for(int index = 0; index < NUM_PAGERS; index++) { 
      LinearLayout pagerLayout = (LinearLayout) inflater.inflate(R.layout.view_pager, null); 

      //header textview 
      TextView pagerHeaderTextView = (TextView) pagerLayout.findViewById(R.id.headerTextView); 
      pagerHeaderTextView.setText("Header #" + index); 

      //set the pager's adapter 
      UninterceptableViewPager viewPager = (UninterceptableViewPager) pagerLayout.findViewById(R.id.pager); 
      TestFragmentPagerAdapter pagerAdapter = new TestFragmentPagerAdapter(this.getSupportFragmentManager(), index); 
      viewPager.setAdapter(pagerAdapter); 

      fragmentPagerLayout.addView(pagerLayout); 
     } 
    } 
} 

TestFragment의 onCreateView 및 onAttach 방법

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_layout, container, false); 

    TextView titleText = (TextView) view.findViewById(R.id.titleText); 
    titleText.setText(getArguments().getString("title")); 

    return view; 
} 

public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    Log.i("ViewPagerTest", "attached"); 
} 

및 TestFragmentPagerAdapter의의 getItem 방법은

public Fragment getItem(int position) { 
    String title = titles[position]; 
    Log.i("ViewPagerTest", "Adapter #" + id + "--" + title); 
    return TestFragment.newInstance(title, position); 
} 

이 뷰 페이저 레이아웃

view_pager.xml 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/headerTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <com.example.viewpagertest.UninterceptableViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="100dip" 
     android:paddingBottom="5dip" 
     android:background="@drawable/custom_shape" /> 

</LinearLayout> 

그리고 지느러미 아, 로그가 있습니다. 두 번째보기 호출기를 스 와이프하면 첫 번째보기 호출기와 마찬가지로 새 조각이 첨부됩니다. 나는 모든 호출기와 어댑터의 변수 상태를 검사하기도했는데 첫 번째 호출기가 다른 호출기와 다른 점은 알지 못합니다.

I/ViewPagerTest(8304): Adapter #0--title 1 
I/ViewPagerTest(8304): Adapter #0--title 2 
I/ViewPagerTest(8304): attached 
I/ViewPagerTest(8304): attached 
I/ViewPagerTest(8304): Adapter #1--title 1 
I/ViewPagerTest(8304): Adapter #1--title 2 
I/ViewPagerTest(8304): attached 
I/ViewPagerTest(8304): attached 
I/ViewPagerTest(8304): Adapter #0--title 3 
I/ViewPagerTest(8304): attached 
I/ViewPagerTest(8304): Adapter #1--title 3 
I/ViewPagerTest(8304): attached 

위의 로그는 2 개의보기 호출기에만 있지만 결과는 모든 어댑터 수에 대해 동일합니다.

모든보기 호출기를 팽창 대신 직접 XML에 추가하면 모든보기 호출기가 문제없이 표시됩니다.

편집

내가 스크린 샷을 게시 할 수있는 충분한 명성을 가지고 있지 않기 때문에, 여기가 어떻게 생겼는지입니다. 앞서 언급 한 것처럼 첫 번째보기 호출기의 조각이 표시됩니다. 그러나 아래에서 볼 수 있듯이 두 번째보기 호출기에서는 제대로 연결되어 있어도 볼 수 없으며 두 번째 호출기를 통해 스 와이프 할 수 있습니다.

Header #0 
---------------------------- 
| title 1     | 
---------------------------- 

Header #1 
---------------------------- 
|       | 
---------------------------- 
+0

나는 TestFragmentPagerAdapter가 FragmentStatePagerAdapter를 확장한다는 것을 상기하는 것을 잊어 버렸다. – Sandeep

답변

1

인스턴스를 관리 할 때 어댑터에 [FragmentPagerAdapter][1]을 확장 해보십시오. 어댑터를 설정할 때 특별히이 방법을 확인하십시오. your_adapter.setOffscreenPageLimit(# fragments);

0

간단한 해결책이 하나 있습니다. 변경 한 후에는 setAdapter를 다시 호출하십시오.

viewPager.setAdapter(pagerAdapter); 
+0

정확히 무슨 뜻인지 잘 모르겠지만 모든보기 호출기가 루트 레이아웃에 추가 된 후 어댑터 설정을 시도했습니다. 변경은 없습니다. – Sandeep

1

상위 조각 안에 조각을 포함하려면 중첩 된 조각을 사용해야합니다. 부모 조각에서 getChildFragmentManager() 대신 getFragmentManager()을 호출하여 작업 FragmentManager를 가져옵니다.

관련 문제