2

次の問題があります。

私のアプリは、動的に追加されるいくつかのフラグメントで構成されています。プッシュ ボタンとテキスト編集 (「fragA」と呼ばれる) を持つ 1 つのフラグメントがあります。

プッシュ ボタンをクリックすると、テキスト ('fragB' と呼ばれる) を含む別のフラグメントが表示されます。私は次のコードでこれを行います (fragA クラス内):

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
            Fragment howFragment = new HowFragment();

            FragmentTransaction transaction = null;
            transaction = getFragmentManager().beginTransaction();
            transaction.replace(R.id.flQuestion, howFragment);
            transaction.addToBackStack(null);
            transaction.commit();

            }
        });

今問題はこれです:

fragA のボタンを押すと、フラグメント (fragB) が作成されて画面に表示されますが、fragA のプッシュボタンがあった場所を押すと、新しいフラグメント (fragB) が作成されます。また、fragA の textedit があった場所を押すと、fragB のキーボードが開きます。

FragB は、fragA を置き換えずにオーバーレイしているようです。

また、次のフラグメントにスワイプすると、fragB が削除され、fragA が正常に表示されるようにしたいと考えています (ボタンが押されていないときの状態)。

アップデート #

これを追加および削除しようとすると、次の logcat 出力が表示されます。

FATAL EXCEPTION: main
java.lang.IllegalArgumentException: No view found for id 0x7f090015      (com.example.eindwerkappv1:id/flQuestion) for fragment HowFragment{419c93c8 #3   id=0x7f090015}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)  
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at   android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4441)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
at dalvik.system.NativeStart.main(Native Method)
4

3 に答える 3

2

fragAあなたのフラグメントは XML レイアウトで定義されていると思いますか?

documentationによると、<fragment>タグを使用すると次のようになります。

システムは、フラグメントによって返されたビューを要素の代わりに直接挿入します。

これが、存在しないため、前のフラグメントを削除できない理由です。コードからフラグメントを変更する場合は、コードからの最初のフラグメントも追加する必要があります。

のようなコンテナーを使用し、 を使用して、アクティビティFrameLayoutのこのコンテナーに最初のフラグメントを追加する必要があります。onCreate()FragmentTransaction.add()

次に、FragmentTransaction.replace()メソッドが機能するはずです。

于 2013-03-15T14:59:00.673 に答える
0

私は今解決策を見つけました。

私はまだreplaceメソッドを使用していますが、新しいフラグメントでontouchイベントをキャッチする必要がありました。

別のフラグメントの問題に関するフラグメント

答えについては前のリンクを参照してください

于 2013-03-16T13:54:04.973 に答える
0

だから、あなたはただフラグメントと新しいものをosingする代わりに呼ん.remove()でみませんか?EditText.add()TextView Framgent.replace()

このようなことをしてください:

fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(addCommentFragment)
.add(R.id.containerForFragments, commentFragment, "comment"+ 
String.valueOf(numOfComments)).commit();

これは私のために働いた。

于 2013-03-15T14:43:44.537 に答える