在Fragment中设置浮动操作按钮的可见性

时间:2017-09-18 01:04:07

标签: android android-fragments android-viewpager

我在ViewPager的活动和片段中制作ViewPager。我在活动中制作了一个浮动动作按钮。当用户移动到某个片段时,我想让浮动动作按钮不可见。我尝试将代码fab.setVisibility(View.INVISIBLE)添加到特定片段的onResume中,但它无法正常工作。如何以编程方式设置可见性?

“CertainFragment.java”

public void onResume() {
    super.onResume();
    FloatingActionButton fab =(FloatingActionButton)getActivity().findViewById(R.id.fab_button_circle_board);
    fab.setVisibility(View.INVISIBLE);
}

“certain_activity's_layout.layout”

`

            <android.support.v4.view.ViewPager
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/circle_board_viewpager">

            </android.support.v4.view.ViewPager>

            <io.github.yavski.fabspeeddial.FabSpeedDial
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/fab_button_circle_board"
                app:fabMenu="@menu/fab_menu_circle_board"
                app:fabSize="normal"
                app:fabGravity="bottom_end"
                app:miniFabBackgroundTint="#FFFFFF"
                app:miniFabTitleTextColor="@color/colorPrimaryDark"
                app:miniFabDrawableTint="@color/colorPrimaryDark"/>
      </FrameLayout>`

3 个答案:

答案 0 :(得分:1)

您可以将pagechangelistener添加到viewpager(在Activity中),并更改浮动按钮的可见性。

viewPager.addOnPageChangeListener(this);

@Override public void onPageScrolled(int position, float arg1, int arg2) {
  changeFab(position); }

private void changeFab(final int currentTabPosition) {

    switch (currentTabPosition) {
        case 0:
            fab.setVisibility(View.VISIBLE);
            break;

        case 1:
            fab.setVisibility(View.GONE);
            break;

        case 2:
           fab.setVisibility(View.VISIBLE);
           break;
        default:
           fab.setVisibility(View.VISIBLE);
           break;
    }

}

答案 1 :(得分:0)

创建 CallBack ,当该用户输入该Fragment时,调用CallBack方法,并在Activity中的方法中设置该按钮不可见。

答案 2 :(得分:0)

这是因为使用ViewPager + Fragments时ViewPager的预加载。

 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {

    if (getUserVisibleHint()) {
        FloatingActionButton fab =(FloatingActionButton)getActivity().findViewById(R.id.fab_button_circle_board);
        fab.setVisibility(View.INVISIBLE);
    }
}

当片段可见时,将调用SetUserVisibleHint(boolean isVisibleToUser)。当片段可见或不可见时,您可以在其中执行某些操作。