首页 > 解决方案 > 为什么我的浮动操作按钮在 ViewPager 中不能正常工作?

问题描述

我在我的应用程序中设置了一个 ViewPager,并尝试设置两个浮动操作按钮,一个左一个和一个右一个,以执行与 ViewPager 相同的操作,以便用户在导航方面有选择权。我正在尝试将其设置为左按钮在第一页上不可见,而右按钮在最后一页上不可见,但按钮的外观似乎是零星的。我已经尝试调试应用程序,并且在测试每种情况后,都会执行相应的代码,所以我无法理解为什么会发生这种行为。任何帮助,将不胜感激。

测试片段:

public class TestFragment extends Fragment {

    public static final String ARG_ID = "Id";
    private int Id;
    private String title;
    private TextView titleTV;
    private String description;
    private TextView descriptionTV;
    private int number;
    private TextView numberTV;
    private FloatingActionButton leftBtn;
    private FloatingActionButton rightBtn;

    public static TestFragment newInstance(int Id) {
        Bundle args = new Bundle();
        args.putSerializable(ARG_ID, Id);

        TestFragment fragment = new TestFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_test, container, false);

        Id = getArguments().getInt(ARG_ID);
        title = Test.testData[Id].getTitle();
        description = Test.testData[Id].getDescription();
        number = Test.testData[Id].getNumber();

        titleTV = view.findViewById(R.id.title);
        titleTV.setText(title);

        descriptionTV = view.findViewById(R.id.description);
        descriptionTV.setText(description);

        numberTV = view.findViewById(R.id.number);
        numberTV.setText(String.valueOf(number));

        leftBtn = view.findViewById(R.id.left_btn);
        rightBtn = view.findViewById(R.id.right_btn);
        toggleButtons();

        leftBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                testViewPager.setCurrentItem(--index);
                toggleButtons();
            }
        });

        rightBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                testViewPager.setCurrentItem(++index);
                toggleButtons();
            }
        });

        return view;
    }

    public void toggleButtons() {
        if(index == 0) {
            leftBtn.setVisibility(View.INVISIBLE);
        }
        else if(index == Test.testData.length - 1) {
            rightBtn.setVisibility(View.INVISIBLE);
        }
        else {
            leftBtn.setVisibility(View.VISIBLE);
            rightBtn.setVisibility(View.VISIBLE);
        }
    }
}

TestPagerActivity:

public class TestPagerActivity extends AppCompatActivity {
    public static int index;
    public static ViewPager testViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_pager);

        index = (int) getIntent().getSerializableExtra(EXTRA_ID);

        testViewPager = findViewById(R.id.test_view_pager);

        FragmentManager fragmentManager = getSupportFragmentManager();
        testViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
            @Override
            public Fragment getItem(int position) {
                return TestFragment.newInstance(position);
            }

            @Override
            public int getCount() {
                return Test.testData.length;
            }
        });

        for(int i = 0; i < Test.testData.length; i++) {
            if(i == index) {
                testViewPager.setCurrentItem(i);
                break;
            }
        }
    }
}

标签: android-fragmentsandroid-viewpagerfloating-action-button

解决方案


推荐阅读