まず第一に、私はこのエラーを長い間グーグルで検索しており、多くの解決策を見つけましたが、それらのどれも私を助けてくれませんでした.
私の問題は、画面の上半分にスライドショー (水平スクロールビューで実現) があり、下半分にグリッドビューがあることです。アプリを初めて起動すると、スライドショーをクリックすると例外がスローされます: IllegalStateException: onSaveInstanceState 後にこのアクションを実行できません
LogCat は、fragmentmanager が「commit()」メソッドでフラグメントを変更しようとすると、これが発生することを示しています。「commitAllowingStateLoss()」メソッドを既に試しましたが、「アクティビティが破棄されました」という例外が発生します。これも、フラグメント マネージャーが変更をコミットしようとする同じ行で発生します。
代わりに、グリッドビューのグリッドタイルの 1 つをクリックすると、フラグメント マネージャーは問題なくコンテンツを切り替えます。スライドショーとグリッドビューは同じフラグメントの一部であり、フラグメントマネージャーはコンテンツを切り替えることができ、一度は切り替えることができないため、これは奇妙な動作のように思えます。
誰でもこの動作を説明して、私のエラーを理解するのを手伝ってもらえますか? いくつかのコードを次に示します。
フラグメントを切り替える switchContent メソッドの一部:
ft.replace(R.id.fragment_container, fragment, tag);
fragment.setCustomTag(tag);
ft.commit();
スライドショーのクリックがジェスチャ検出器によって検出されます。
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Point position = convertPositions();
Bundle b = new Bundle();
b.putLong(Constants.BUNDLE_ID, getCurrentId());
b.putInt(Constants.BUNDLE_POSITON, position.y);
((NavigationActivity) getContext()).switchContent(
Constants.TAG_FRAGMENT, b, false);
return true;
}
また、グリッドビューのタイルをクリックすると、通常の onClickListener によって検出されます。
gridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(android.widget.AdapterView<?> arg0, View v,
int position, long arg3) {
Bundle b = new Bundle();
b.putLong(Constants.BUNDLE_ID, id);
b.putInt(Constants.BUNDLE_R_POSITION, position);
context.switchContent(Constants.TAG_FRAGMENT2, b, refresh);
}});
前もって感謝します ;)