隐藏可重用片段的正确方法

时间:2015-12-29 13:02:38

标签: android android-fragments

我的应用中有一个片段,可以在点击地图中的项目时显示信息。

单击标记时,从底部向上滑动,显示此片段。如果片段已经存在,首先它会向下滑动“旧”信息,然后向上滑动新片段。但是,您可以隐藏此信息片段,例如,当您单击位置按钮中的典型中心时。

问题:

当我点击这个“位置中心”按钮时,简单地说,我隐藏了片段:

@Override
public void hideInfoBanner() {
    if (infoFrameLayout != null){
        infoFrameLayout.setVisibility(View.GONE);
    }
}

所以,当我点击另一个标记(或相同)时:

private void loadInfoFragment(Fragment fragment) {
    if (!isFinishing()) {
        infoBannerFragmentTansaction = getSupportFragmentManager().beginTransaction();
        infoBannerFragmentTansaction.setCustomAnimations(R.anim.slide_up_anim, R.anim.slide_down_out_anim);

        infoFrameLayout.setVisibility(View.VISIBLE);

        if (infoBannerFragmentTansaction == null) {
            infoBannerFragmentTansaction.add(R.id.map_wifispot_info_banner, fragment);
        } else {
            infoBannerFragmentTansaction.replace(R.id.map_wifispot_info_banner, fragment);
        }

        infoBannerFragmentTansaction.commitAllowingStateLoss();
    }
}

旧的(和隐藏的)片段会暂时显示,向下滑动,然后使用新信息向上滑动。我不希望它暂时出现,只是向上滑动新信息。

我想我正在“打破”隐藏它的片段生命周期。当我再次打电话给它时,首先它结束了它正在做的事情......

那么,我怎样才能隐藏一个片段来结束它的生命周期呢?

1 个答案:

答案 0 :(得分:1)

你没有打破任何生命周期。你的片段就像​​你设置的那样。在更改它会在代码中制作动画,替换和制作动画。如果你想在片段不可见时只在动画中设置,那么为它添加一个条件

if(infoFrameLayout.getVisability()==View.GONE){

    infoBannerFragmentTansaction.setCustomAnimations(R.anim.slide_up_anim, R.anim.your_custom_animation_to_hide_it_in_0_milis);
}else{

    infoBannerFragmentTansaction.setCustomAnimations(R.anim.slide_up_anim, R.anim.slide_down_out_anim);
}

编辑:

嘿,我已经制作了这样的退出动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false"
    android:interpolator="@android:interpolator/accelerate_decelerate">
    <alpha
        android:toAlpha="0.0"
        android:duration="0"
        />

</set>

它就像一个魅力