Android 如何从活动中的按钮为viewpager中的不同片段提供侦听器

Android 如何从活动中的按钮为viewpager中的不同片段提供侦听器,android,android-viewpager,fragment,Android,Android Viewpager,Fragment,我正在尝试使用viewpager中的片段创建表单,这是一个循序渐进的过程 viewpager中有6个片段。活动中的后退按钮和下一个按钮 我想在用户单击“下一步”按钮时保存表单 这里的参考是代码 用于加载片段的适配器 } 活动中有两个按钮不在片段中 您应该有一个类似OnSaveTapped的界面 然后让片段实现上面的接口,例如: public class PersonalDetailsFragment extends Fragment implements OnSaveTapped{ pu

我正在尝试使用viewpager中的片段创建表单,这是一个循序渐进的过程

viewpager中有6个片段。活动中的后退按钮和下一个按钮

我想在用户单击“下一步”按钮时保存表单

这里的参考是代码

用于加载片段的适配器

}

活动中有两个按钮不在片段中


您应该有一个类似OnSaveTapped的界面

然后让片段实现上面的接口,例如:

public class PersonalDetailsFragment extends Fragment implements OnSaveTapped{

   public void onSaveTapped(){
       //do your business code here to save data 
   }
}
最后,在活动类中:

@Override
public void onClick(View view) {
   switch (view.getId()) {
   case R.id.backButton:
   if (viewpager.getCurrentItem() == 0){

   }else{
       viewpager.setCurrentItem(viewpager.getCurrentItem() - 1);
   }
   break;

   case R.id.nextButton:
      if (viewpager.getCurrentItem() == 6){

      }else{
          viewpager.setCurrentItem(viewpager.getCurrentItem() + 1);
      }

  break;
  case R.id.button_save:
     ((OnSaveTapped)viewpager.getCurrentFragment()).onSaveTapped();
}
不要忘记创建名为getCurrentFragment的新方法,以返回RegistrationPagerAdapter中的当前项片段


那么问题是什么呢?你试过什么?我试过使用接口,但没有成功。我想保存来自同一按钮的每个片段。如果我在fragment1上,按钮应该在fragment1上运行api。如果我在fragment2上,它应该运行fragment2的api等等。现在,如果我在fragment2上,它仍然运行fragment1。这是实际的问题,在继续新片段之前,您需要在活动级别保存数据。您也可以使用viewmodel保存数据;什么是getCurrentFragment;是的,你必须在RegistrationPagerAdapter中创建一个方法,让我更新我的答案…我尝试了你的答案作为替代方法。。我对你的代码也做了一些修改,效果也很好。谢谢
getActivity().findViewById(R.id.backButton);
getActivity().findViewById(R.id.nextButton);
public interface OnSaveTapped{
   void onSaveTapped();
}
public class PersonalDetailsFragment extends Fragment implements OnSaveTapped{

   public void onSaveTapped(){
       //do your business code here to save data 
   }
}
@Override
public void onClick(View view) {
   switch (view.getId()) {
   case R.id.backButton:
   if (viewpager.getCurrentItem() == 0){

   }else{
       viewpager.setCurrentItem(viewpager.getCurrentItem() - 1);
   }
   break;

   case R.id.nextButton:
      if (viewpager.getCurrentItem() == 6){

      }else{
          viewpager.setCurrentItem(viewpager.getCurrentItem() + 1);
      }

  break;
  case R.id.button_save:
     ((OnSaveTapped)viewpager.getCurrentFragment()).onSaveTapped();
}
public class RegistrationPagerAdapter extends FragmentPagerAdapter {

     private Fragment fragment;
     /**other lines of code*/
     public Fragment getCurrentFragment(){
        return fragment;
     }
}