ユーザー向けのヒントを表示するためのフラグメントを作成しようとしています。フラグメントのcreateViewメソッドは、ViewPagerを返し、AsyncTaskを介してPagerAdapterをセットアップします。このフラグメントは、ユーザーがボタンを押すと、FragmentActivityに動的に追加されます。ユーザーが同じボタンをもう一度押す最後の項目に到達すると、このフラグメントはFragmentActivityから削除されます。android.R.id.contentによって識別されるFrameLayoutにフラグメントを追加することに注意することが重要です。
わかりました。初めてボタンを押すと、期待どおりに機能します。しかし、2回目にボタンを押すと、ViewPagerが表示されません。ビュー階層を使用して何が起こっているかを確認すると、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" />
誰かがこの問題で私を助けることができますか?
編集:
しばらくの間、アクティビティにフラグメントを追加した後、フラグメントのshowメソッドとhideメソッドを使用しています。しかし、それは正しいアプローチではありません。ViewPagerでフラグメントを再度追加できない理由がわかりません。ViewPagerは正しく追加および削除されますが、2回目は、何も表示されません。