私はViewPagerを使用してフラグメントのセットを循環させています。各フラグメントを画面にスライドさせた後に更新したいと思います。基本的には、断片が整理された後にテキストを「フェードイン」したいと思います。onPageSelectedの実行前にBEFORE onCreateViewが呼び出されましたか?
フラグメントのonStart
とonResume
メソッドを使用しようとしましたが、これはほとんどのページで機能しますが、2番目のページでは機能しません。何故ならば、最初のページと2番目のページは、 onResumeメソッドは同時に呼び出されます(2ページ目が画面に表示される前に)。
今、私はonPageChangeListenerのonPageSelected
コールバックで動作するようにしようとしています。その方法は、次のようになります。
@Override
public void onPageSelected(final int position) {
mCurrentPosition = position;
PageFragment fragment = (PageFragment) ((MainActivity.ScreenSlidePagerAdapter) mViewPager.getAdapter()).getItem(position);
fragment.onSelect();
}
とフラグメントでonSelect
方法は次のようになります。
public void onSelect(){
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
mSwitcher.setText("");
mNum = getArguments() != null ? getArguments().getInt("num") : 1;
Media currentMedia = slideshow.getMedia().get(mNum);
mSwitcher.setText(currentMedia.getDisplayName());
}
},
4000);
}
この方法の問題点は、ラインmSwitcher.setText("");
がNullPointerException
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextSwitcher.setText(java.lang.CharSequence)' on a null object reference
これは、その中にonCreateView
メソッドがあることを示唆していますtクラスは実行されていないので、mSwitcher
変数がインスタンス化される場所です。私はバナナのように見えますが、この時点では画面上に既にビューが表示されています。
この問題を解決する方法についてのご意見をいただければ幸いです。これは私の最初のAndroidの経験であり、私はこの愚かなテキスト・フェードインの問題を一週間も運行なしで解決しようとしてきました。現時点では、ほとんどすべてのマイナーチェンジがこれまでに痛みを伴うため、プラットフォームとしてモバイルを放棄する準備はほぼ完了しています。
をアダプタを変更
のようなものを持っているかもしれません - これは 'ViewPager'がFragmentsとどのように機能するか(デフォルトでは)です。オフスクリーンフラグメントの読み込みをhttps://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)で調整できます – CzarMatt
フラグメントに 'onCreateView()'メソッドを表示する –