いくつかのフラグメントを作成し、次の方法で最初のフラグメントを追加します。
mainFragment = (MainFragment) MainFragment.create();
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
.add(R.id.content, mainFragment, MAIN_FRAGMENT_TAG)
.commit();
2番目のフラグメントは次のように追加されます。
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
//.hide(mainFragment)
.add(R.id.content,VenueFragment.create(vid), "Venue Fragment")
.addToBackStack(null)
.commit();
setDrawerIndicatorEnabled(false);
このトランザクションに非表示メソッドが適用されておらず、VenueFragment
が開かれていることがわかると、この場合の問題は、VenueFragment
が開かれている間(そして全画面表示)を押すことです。このフラグメントの空のセクションで、MainFragment
クリック可能なビューの呼び出しを呼び出します。 これを防ぐにはどうすればよいですか?
非表示オプションを使用すると、それは起こりませんが、何らかの理由でMainFragment
を削除するためのアニメーションが増えて、奇妙な体験になります。
ViewGroup
のルートVenueFragment
をクリック可能にして、クリックイベントを処理し、他のFragment
に(zオーダーで)渡されないようにする必要があります。
2番目のフラグメントのビューのクリック可能なプロパティをtrueに設定します。
例えば:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:clickable="true" />
VenClickFragmentにonClickListenerを設定することは機能しますが、もう少し説明を追加します。メインフラグメントにタッチイベントを取得させることは、ベニューフラグメントが透過的な場合を処理するための動作です。その場合、タッチが透明なビューを透過して下のビューに到達することを期待するのが妥当です。そのため、Androidはタッチイベントを処理できるようになるまで渡します。onClickListenerを設定すると、イベントが処理され、次のビューに渡されなくなります。防止について「正確」にしたい場合下のフラグメントをクリックすると、いくつかのオプションがあります:
まあ非常に迅速な答えはAndroid:clickable="true"
は、フラグメントのレイアウトプロパティの上部にあります。
ただし、activityとFrameLayoutを作成し、idおよびactivityに他の要素はありません。fragmentを画面に表示したいときはいつでも、そのアクティビティを呼び出して使用してください
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
.replace(R.id.frameLayoutId, mainFragment, MAIN_FRAGMENT_TAG)
.commit();
addの代わりにreplaceを使用して、frameLayoutactivityは、で指定されたフラグメントのレイアウトに置き換えられます/ frameLayoutId
私はより良い解決策を持っています、少なくとも私が思うことは:P。
トランザクションをフラグメント化している間は、hideおよびshowメソッドを使用します。