android-fragments 如何在ViewPager中隐藏和显示带有片段的FloatingActionButton?

mwyxok5s  于 2022-11-13  发布在  Android
关注(0)|答案(2)|浏览(174)

我试图只在一个片段上显示我的FloatingActionButton,并隐藏在其余片段中。我尝试了多个答案,但没有任何效果。我尝试了以下解决方案:
Hide a Floating Action Button of another Layout
但是它不起作用。我试着在两个片段上添加按钮,一个显示FAB,一个隐藏FAB,这是有效的,但是一旦我删除按钮,它就不会自动显示。下面是我的代码:
隐藏_片段.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

</LinearLayout>

显示_片段.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

</LinearLayout>

HiddenFragment.java:

public class HiddenFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (container == null) {
            return null;
        }
        View view = inflater.inflate(R.layout.hidden_fragment, container, false);

        final FloatingActionButton fab = ((MainActivity) getActivity()).getFloatingActionButton();

        if (fab != null) {
            ((MainActivity) getActivity()).hideFloatingActionButton();
        }

        return view;
    }

}

ShownFragment.java:

public class ShownFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (container == null) {
            return null;
        }
        View view = inflater.inflate(R.layout.hidden_fragment, container, false);

        final FloatingActionButton fab = ((MainActivity) getActivity()).getFloatingActionButton();

        if (fab != null) {
            ((MainActivity) getActivity()).showFloatingActionButton();
        }

        return view;
    }

}

在我的www.example.com中MainActivity.java我有这样的话:

public FloatingActionButton getFloatingActionButton() {
    return fab;
}

public void showFloatingActionButton() {
    fab.show();
}

public void hideFloatingActionButton() {
    fab.hide();
}

我目前的方法不起作用。当我启动应用程序时,启动的第一个片段是HiddenFragment。但当我转到ShownFragment时,FAB并没有出现。我尝试了一种不同的方法,我给每个片段添加了一个按钮,并给按钮添加了showFloatingActionButton()和hideFloatingActionButton(),这样就起作用了。有人知道我做错了什么吗?

91zkwejq

91zkwejq1#

要在ViewPager中显示/隐藏带片段的FloatingActionButton,只需使用ViewPager.OnPageChangeListener并在所需位置显示FloatingActionButton,并在所需位置隐藏它。
这将出现在“活动:

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                switch (position) {
                case 0:
                    fab.hide();
                    break;
                case 1:
                    fab.show();
                    break;
                case 3:
                    fab.hide();
                    break;
                default:
                    fab.hide();
                    break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
ix0qys7i

ix0qys7i2#

隐藏浮动按钮从其他片段。它在我的情况下工作。
在www.example.com中MainActivity.java添加:

private ActivityMainBinding binding;

public FloatingActionButton getFloatingActionButton() {
     return binding.fab;
}

在第二个片段中创建视图:

private FloatingActionButton floatingButton;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     floatingButton = ((MainActivity) getActivity()).getFloatingActionButton();
     floatingButton.hide();
     ...
}

相关问题