Android:显示和隐藏片段

Android: Display and Hide Fragment

我里面有一些Activity单全屏Fragment。在那个 Fragment 里面,我有另一个 Fragment 覆盖在屏幕的底部。所以在屏幕的顶部我有 Button 控制内部 Fragment:

的 Visible/Hide
  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();
    }
    

嗯 - 这完全行不通...

您的 isInnerVisible 似乎始终为 false(我假设它开始时为 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();
}