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
----------------------------
| |
----------------------------
나는 TestFragmentPagerAdapter가 FragmentStatePagerAdapter를 확장한다는 것을 상기하는 것을 잊어 버렸다. – Sandeep