Xamarin.Android中如何通过next按钮控制ViewPager切换Fragment
你需要打通Fragment和宿主Activity的通信,让按钮点击可以通知Activity控制ViewPager切换页面,修改步骤如下:
步骤1:修改 SignUpActivity.cs
首先将ViewPager和Fragment列表提升为全局类成员,方便后续方法调用,同时新增切换下一页的公共方法,修改指示器的硬编码配置适配后续新增Fragment的场景:
public class SignUpActivity : AppCompatActivity { TextView logIn; private TextView[] _dots { get; set; } private LinearLayout _dotsLayout { get; set; } // 新增全局成员 private ViewPager _pager; private List<AndroidX.Fragment.App.Fragment> _fragments; Button btnNext; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.activity_signup); _fragments = new List<AndroidX.Fragment.App.Fragment>(); _fragments.Add(new SignUpFragment_1()); _fragments.Add(new SignUpFragment_2()); // 后续新增Fragment直接在这里添加即可 var adapter = new S_UViewPagerAdapterFragment(SupportFragmentManager, _fragments); _pager = FindViewById<ViewPager>(Resource.Id.pager); _pager.Adapter = adapter; _pager.PageSelected += Pager_PageSelected; _dotsLayout = FindViewById<LinearLayout>(Resource.Id.indicator); AddDotsIndicator(0); logIn = FindViewById<TextView>(Resource.Id.logIn); btnNext = FindViewById<Button>(Resource.Id.btnNext); // 如果你的next按钮是放在Activity布局里的全局通用按钮,直接加这个点击事件即可 // btnNext.Click += (s,e) => MoveToNextPage(); logIn.Click += LogIn_Click; } // 新增:切换到下一页的公共方法 public void MoveToNextPage() { var currentPos = _pager.CurrentItem; // 没到最后一页就切下一页,到最后一页可以自行添加注册提交逻辑 if (currentPos < _fragments.Count - 1) { _pager.CurrentItem = currentPos + 1; } else { // 最后一页的自定义逻辑,比如校验信息、提交注册 } } private void AddDotsIndicator(int pos) { // 修改:动态取Fragment数量,不再硬编码为2,适配后续新增场景 _dots = new TextView[_fragments.Count]; _dotsLayout.RemoveAllViews(); for (int i = 0; i < _dots.Length; i++){ _dots[i] = new TextView(this); _dots[i].Text = "."; _dots[i].TextSize = 35; _dotsLayout.AddView(_dots[i]); } if(_dots.Length > 0) { _dots[pos].SetTextColor(Android.Graphics.Color.Red); } } // 其余原有方法保持不变即可,此处省略 }
步骤2:修改 SignUpFragment_1.cs
给Fragment里的next按钮加点击事件,调用宿主Activity的切换方法:
public class SignUpFragment_1 : AndroidX.Fragment.App.Fragment { Button btnNext; public SignUpFragment_1() { } public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.Inflate(Resource.Layout.activity_signupFragment1, container, false); btnNext = view.FindViewById<Button>(Resource.Id.btnNext); // 新增点击事件 btnNext.Click += (s, e) => { // 拿到宿主Activity,调用切换方法 if (Activity is SignUpActivity signUpActivity) { signUpActivity.MoveToNextPage(); } }; return view; } }
后续新增Fragment适配
如果后续添加了SignUpFragment_3、SignUpFragment_4等更多页面,只需要:
- 在SignUpActivity的
_fragments列表里Add对应的Fragment实例 - 对应Fragment里的next按钮同样调用
MoveToNextPage()方法即可,无需修改其他逻辑
内容的提问来源于stack exchange,提问作者VossJ
相关产品推荐
相关产品推荐

