ViewPager限制滑动视图,但单击按钮时使其可见

时间:2020-07-22 21:20:25

标签: android android-fragments android-viewpager

我正在设计一个应用程序,其中包含一个包含4个视图的viewpager。我想通过滑动使三个视图可访问,但限制了第四视图。我希望在第三个视图中单击按钮时可以看到它。

我知道我可以通过在viewpageradapter中设置get count来限制视图:

@Override
public int getCount() {
    return 3;
}

它可以正常工作,但是单击第三个视图中的按钮不会使其转到第四个视图,从逻辑上讲,我认为这很好,但是我该如何做到这一点。在按钮的第三个视图中单击时,滑动到4个视图。

我可以还是应该动态更改getCount()?听起来很黑,所以我想知道一种更好的方法。

编辑:我正在尝试通过在ViewPager中动态添加视图来解决我的问题。我尝试在当前视图位置是第二个片段时添加一个新片段,并且可以正常工作,但是当在第二个片段中单击按钮时如何添加新片段。

主要活动

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewpager = findViewById(R.id.vp);
        adapter = new PageAdapter(getSupportFragmentManager(), BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        viewpager.setAdapter(adapter);
        addFragments();

        /*--- Page Change Listner ---*/
        viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                Log.d("Current Page: ", position+"");
//                if(position==1 ){
//                    adapter.addFragment(new ThridFragment(), "Fragment 3");
//                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        viewpager.setCurrentItem(0);
    }

    private void addFragments() {
        adapter.addFragment(new FirstFragment(), "Fragment 1");
        adapter.addFragment(new SecondFragment(), "Fragment 2");
    }

PAGER适配器

public class PageAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> fragments = new ArrayList<>();
    private List<String> tabTitles = new ArrayList<>();

    public PageAdapter(@NonNull FragmentManager fm, int behavior) {
        super(fm, behavior);
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitles.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    public void addFragment(Fragment fragment, String tabTitle) {
        fragments.add(fragment);
        tabTitles.add(tabTitle);
        notifyDataSetChanged();
    }
}

其中一个片段

public class SecondFragment extends Fragment {

    public SecondFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_second, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Button btn = view.findViewById(R.id.newFragment);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d("Action","Clicked");
            }
        });

    }
}

0 个答案:

没有答案