我正在尝试制作一个片段来为用户显示提示。片段的 createView 方法返回一个 ViewPager 并通过 AsyncTask 设置 PagerAdapter。当用户按下按钮时,这个片段会动态地添加到 FragmentActivity 中。如果用户再次按下相同按钮到达最后一项,则从 FragmentActivity 中删除该片段。需要注意的是,我将片段添加到由 android.R.id.content 标识的 FrameLayout 中。
好的,我第一次按下按钮时,它按预期工作。但是我第二次按下按钮时,ViewPager 没有出现。当我使用 View Hierarchy 查看发生了什么时,我在正确的位置看到 ViewPager,但没有任何项目。我调试并注意到调用了 PagerAdapter 的 getCount() ,但从未调用过 getItem 。
这是我的片段的 createView 方法:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View tipsView = inflater.inflate(R.layout.tip_manager_layout, container, false);
this.tipPagerAdapter = new TipPagerAdapter(getFragmentManager(), getArguments().getIntArray(TIP_LAYOUT_IDS_KEY));
this.viewPager = (ViewPager) tipsView.findViewById(R.id.tip_pager);
this.viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if(position == (tipPagerAdapter.getCount()-1)){
stop();
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
// Workaround to set the PagerAdapter within a fragment transaction
new SetViewPagerAdapterTask().execute();
return tipsView;
}
我以这种方式添加片段:
FragmentTransaction fragmentTransaction = fragmentActivity.getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(android.R.id.content, this, TAG);
fragmentTransaction.commit();
并以这种方式删除片段:
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.remove(tipManagerFragment);
fragmentTransaction.commit();
这是被片段膨胀的布局:
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tip_pager"
android:layout_width="fill_parent"
android:layout_height="175dp"
android:layout_gravity="center_horizontal|bottom"
android:paddingBottom="2dp" />
有人可以帮我解决这个问题吗?
编辑:
有一段时间,我在将片段添加到活动后使用它的显示和隐藏方法。但这不是正确的方法。我不明白为什么我不能用 ViewPager 再次添加片段。ViewPager 已正确添加和删除,但第二次,它根本不显示任何内容。