点击片段后面的隐形布局:

Emi*_*Adz 27 android android-fragments fragmenttransaction fragmentmanager

我创建了几个片段,并按以下方式添加第一个片段:

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();
Run Code Online (Sandbox Code Playgroud)

第二个片段以这种方式添加:

     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);
Run Code Online (Sandbox Code Playgroud)

现在你看到hide方法没有应用于这个事务,并且VenueFragment打开了,在这种情况下的问题是,当VenueFragment按下这个片段的空部分时打开(并且它是一个全屏视图)调用MainFragment可点击视图的调用.我怎么能阻止这个?

如果我使用隐藏选项,那么它不会发生,但由于某种原因,删除它的动画MainFragment正在上升,这会产生一种奇怪的体验.

Emm*_*uel 38

您需要创建可点击的根ViewGroup,VenueFragment以便它处理点击事件,并且它们不会向下传递(在z顺序中)到另一个Fragment.


Dig*_*ale 15

将第二个片段视图上的可点击属性设置为true.

例如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true" />
Run Code Online (Sandbox Code Playgroud)


GLe*_*Lee 7

在VenueFragment上设置onClickListener会有效,但我会再添加一些解释.使主片段获得触摸事件是用于处理场地片段是透明的情况的行为.在这种情况下,可以合理地预期触摸通过您的透明视图到下面的那个.因此,android会通过触摸事件直到可以处理它们.设置onClickListener将处理该事件,防止将其传递给下一个View.如果您希望"正确"防止对较低片段的点击,可以选择以下几种方法:

  1. 从OnPause中的主片段中删除onClickListener,并在OnResume中设置它.这样,只要主片段不是活动片段,就不能单击它.
  2. 在VenueFragment中对顶级布局进行子类化,并重写OnTouchEvent以返回true.这基本上与设置onClickListener完全相同,但您可能会发现它使您打算更清楚地阻止所有触摸事件.