1

まず第一に、私はこのエラーを長い間グーグルで検索しており、多くの解決策を見つけましたが、それらのどれも私を助けてくれませんでした.

私の問題は、画面の上半分にスライドショー (水平スクロールビューで実現) があり、下半分にグリッドビューがあることです。アプリを初めて起動すると、スライドショーをクリックすると例外がスローされます: 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);
            }});

前もって感謝します ;)

4

0 に答える 0