Android:显示和隐藏片段

时间:2015-11-03 14:23:33

标签: android android-fragments android-fragmentactivity fragmentmanager android-framelayout

我有一些Activity单个全屏Fragment。在Fragment内部我有另一个Fragment覆盖屏幕的底部。因此,在屏幕的顶部,我Button控制内部Fragment的可见/隐藏:

  1. 包含Fragment的布局:

    ...
    <FrameLayout
        android:id="@+id/inner_fragment"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_below="@+id/top_part"
        android:name="com.package.InnerFragment" />
    
  2. 控制Button

    controlButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!isInnerVisible) showHideInnerFragment("show");
            else showHideInnerFragment("hide");
        }
    });
    
  3. 辅助方法showHideInnerFragment

    private void showHideInnerFragment(String param) {
        //variables are class members...
        fragmentManager = getFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        innerFragment = new InnerFragment();
        if (param.equals("show")) {
            fragmentTransaction.add(R.id.inner_fragment, innerFragment);
            isInnerVisible = true;
        } else {
            fragmentTransaction.remove(innerFragment);
            isInnerVisible = false;
        }
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }
    
  4. 嗯 - 这完全不起作用......

1 个答案:

答案 0 :(得分:1)

看来你的isInnerVisible总是假的(我假设它从false开始),这会删​​除片段但保持isInnerVisible为false。你可能只需要切换它:

private void showHideInnerFragment(String param) {
    //variables are class members...
    fragmentManager = getFragmentManager();
    fragmentTransaction = fragmentManager.beginTransaction();
    innerFragment = new InnerFragment();
    if (param.equals("show")) {
        fragmentTransaction.add(R.id.inner_fragment, innerFragment);
        isInnerVisible = false;
    } else {
        fragmentTransaction.remove(innerFragment);
        isInnerVisible = true;
    }
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

我还会将一个true / false值传递给参数而不是字符串值,这样可以更容易理解代码正在做什么,因为它现在有点没用。我稍后会用一个例子更新;)

编辑:这是一个更好的方式来做你想要的:

controlButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        showHideInnerFragment(isInnerVisible);
    }
});
private void showHideInnerFragment(boolean isVisible) {
    //variables are class members...
    fragmentManager = getFragmentManager();
    fragmentTransaction = fragmentManager.beginTransaction();
    innerFragment = new InnerFragment();
    if (isVisible == false) {
        fragmentTransaction.add(R.id.inner_fragment, innerFragment);
        isInnerVisible = true;
    } else {
        fragmentTransaction.remove(innerFragment);
        isInnerVisible = false;
    }
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}
相关问题