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