問題タブ [android-configchanges]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 画面をオフにして回転時にデータを復元する
このメソッドの「outState」にデータを保存しています:
これは、アクティビティが再開されたときに、onCreate()
メソッドで次のことができることを意味します。
ただし、これにより、画面がオフになった後に問題が発生します。画面がオフになると、アクティビティは強制終了されます。これは onSaveInstanceState()
、画面オフ期間中にローテーションが発生した場合は が呼び出されずsavedInstancestate
、アクティビティが完全に再開されたため が null であることを意味します。その結果、デバイスがローテーションされたにもかかわらず、値が保存および復元されませんでした。
どうすればこれを回避できますか?
android - ネストされたアダプターの状態を保存する (FragmentPagerAdapter + ListViewAdapter)
私のアクティビティには、シンプルなviewPager + viewPagerAdapterがあります:
viewPager の各ページには、1 つの SearchFragment があります。すべての SearchFragment には、ListView + listViewAdapter のみがあります。
listView のすべての行には、別のアクティビティを開始するボタンがあります (YouTubePlayer ですが、これは重要ではありません)。YouTube ビデオが終了するか、ユーザーが [戻る] ボタンをクリックすると、YouTubePlayer-Activity が閉じ、自分の Activity + ViewPager + ViewPages の SearchFragments + SearchFragments の ListViews が再び表示されます。
viewPager の位置 (Activity のフィールドに保存) を復元できますが、viewPager の SearchFragments (上記の SearchFragmentAdapter のコンストラクターを参照)
ListView のコンテンツとスクロール位置を保持する ListView と ListViewAdapter を復元できません。もちろん、構成の変更でも同じことが起こります。Activity が再度ビルドされ、そのフィールドから viewPager の位置を復元できますが、スクロール位置、特に SearchFragments のコンテンツは失われます。
デバイスを回転させた後、少なくとも listViews のコンテンツ (スクロール位置は便利です) を復元するにはどうすればよいですか?
viewPager と ListViews の状態保存についてはよく読んでいますが、この組み合わせ (viewPager + listView = 独自の状態とコンテンツを持つ 2 つのアダプター) での状態保存に関する良い情報はほとんどありません。
android - 構成変更中に中断されないタスクを開始できるフラグメント
私の英語でごめんなさい
これは質問ではありません。誰かの参考になるかもしれないので投稿します。数か月前にここに配置されたソリューションに基づく私のソリューションですが、後でその作成者が削除しました。しかし、彼のソリューションにはいくつかのバグがあり、私はそれらを修正しようとしました。
アプリで長時間実行されたタスクが実行されている間に別のアプリを開き、別のアプリで画面の向きを変更し、タスクが終了した後にアプリに戻っても、私のソリューションは正常に機能します。
私のソリューションにバグが見つかった場合は、お知らせください。
見てください:
したがって、 の各継承者はFragmentAbleToStartTask
を実装する必要がありますonTaskResult(requestCode, resultCode, result)
。In onTaskResult()
-requestCode
に渡された値ですstartTask(requestCode, ...)
。また、このフラグメントは同時に 1 つのタスクしか実行できないことに注意してください。
TaskNotBeInterruptedDuringConfigurationChange
のサブクラスの例:
FragmentAbleToStartTask
のサブクラスの例:
android - ビューページャーで向きを変更した後のダイアログの null
スワイプするたびに、新しいページが読み込まれます。最初はすべて縦向きで作業していましたが、今は横向きと縦向きで機能させようとしています。しかし、画面を回転させるとNullPointerException
、Dialog
.
MainActivity
の innerclass内でそれを引き起こす関数FragmentStatePagerAdapter
:
フラグメント内の関数:
ダイアログは 内でインスタンス化され、onCreateView
null ではないことをログに記録します。内部にログインするonPageVisible
と null が返され、内部でログイン
mProgress = new ProgressDialog(getActivity());
するonPageVisible
と nullpointer が返されますが、代わりにその行に表示されます。
に設定する必要がある理由が本当にわかりませんonCreateView
。
android - カスタム リスナーの作成方法
フラグメントが表示されたときに応答するリスナーをフラグメント内に作成したいと考えています。私は現在、アクティビティ内の onPageListener でそれを行っていますが、それは私の状況では機能しません。必要なのは、フラグメントに入ったときに onStart で AsyncTask を実行することです。onPageListener を使用すると、前にそれを実行しようとします。
ボタンを使用すると、次のように機能します。
このコードは、gitHubから取得した外部クラスからのものです
ブール値に応答するリスナーは、次のようにそれを行わないことについてすでに行っています: if(true) { code... }
ビューページャーがすでにフラグメントを開始しているページに変更しても呼び出されないため、ボタンを押すと非アクティブになり、リスナーはまだ反応し、それが必要です。