我試圖做一個片段,以顯示用戶的提示。該片段的createView方法返回一個ViewPager並通過AsyncTask設置PagerAdapter。當用戶按下一個按鈕時,這個片段將在FragmentActivity中被添加。如果用戶再次到達最後一個按下相同按鈕的項目,則從FragmentActivity中刪除此片段。請注意,我將這個片段添加到由android.R.id.content標識的FrameLayout中。ViewPager沒有加載項目後刪除並重新添加到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被正確添加和刪除,但第二次,它根本不顯示任何東西。