私は、私のUXフローのセクションを持っています。ここでは、ユーザーのためのメッセージをテキストビューで2秒間フラグメントAに表示し、その後にフラグメントAをフラグメントBに置き換えます。これは、フラグメントA.Android:X秒後に別のフラグメントに移動しますか?
someTextView.setText("some message");
Handler mainLooperHandler = new Handler(Looper.getMainLooper());
mainLooperHandler.postDelayed(new Runnable() {
@Override
public void run() {
((MyActivity) getActivity()).gotoTheNextFragment();
}
}, 2000);
そして、私の活動の関連するメソッド:
public void gotoTheNextFragment() {
Fragment mFragmentB = new FragmentB();
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentContainer, mFragmentB, "FRAGMENTB")
.commit();
}
は、しかし、これはいくつかの問題が発生します。まず、遅延後の実行中にユーザが「戻る」を押すと、ユーザはgetActivityでnullポインタ例外を取得します。第2に、転送を実行しようとしているときに、ユーザーが「onSaveInstanceStateの後にこのアクションを実行できません」というエラーを取得することがあります。
私は 'commit'を 'commitAllowingStateLoss'に変更すると2番目のエラーを回避できますが、これはおそらくベストプラクティスではなく、asynctask内のフラグメント間の移動はお勧めします。このプロセスを達成するためのより良い方法は何ですか(メッセージを表示して2秒待ってから、クラッシュに至らない安全な方法でフラグメントを置き換えてください)。
Context.sendBroadcast(またはその他の通知方法)を試して、フラグメンテーションを変更することをアクティビティに通知しましたか?このようにして、あなたはあなたのアクティビティに、遷移中に何ができるのかを制限する変数を持たせることができますか? – zveljkovic
あなたのフラグメントのonDestroyView()でHandlerタスクをキャンセルしないのはなぜですか? –
私たちが準備しているか、ユーザーが背中を押したり、迷惑をかけることがないように、待っているようなメッセージをスヌーキーバーまたはトーストで使用してください。 – androidnoobdev