我正在尝试通过膨胀 XML 将 View Pagers 动态添加到我的应用程序中。所有视图寻呼机和相应的适配器都被正确实例化,并且所需的片段也被附加。但是,只有第一个视图寻呼机的片段是可见的。对于其他视图寻呼机,我什至可以从一个片段滑动到下一个片段。它们只是不可见。
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
----------------------------
| |
----------------------------