我正在设计一个应用程序,其中包含一个包含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");
}
});
}
}