android - 如何从 ViewPager2 中的 EditText 获取文本?
问题描述
我有一个 ViewPager2,有两页。一个是获取电子邮件,另一个是获取电话号码。为了获得值,我向适配器添加了两个 get 方法,但我不确定这是正确且最安全的方法。这是我的代码:
public class PhoneEmailFragment extends Fragment {
private View view;
private final String[] tabs = {"Phone", "Email"};
private User user;
private int pageSelected = 0;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_phone_email, container, false);
return view;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
assert getArguments() != null;
user = getArguments().getParcelable("user");
}
@Override
public void onStart() {
super.onStart();
viewpagerSetup();
}
private void viewpagerSetup() {
TabLayout tabLayout = view.findViewById(R.id.register_phone_email_tab);
ViewPager2 viewPager2 = view.findViewById(R.id.register_viewpager);
SwipeAdapter adapter = new SwipeAdapter(this);
viewPager2.setAdapter(adapter);
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
pageSelected = position;
}
});
new TabLayoutMediator(
tabLayout,
viewPager2,
(tab, position) -> tab.setText(tabs[position])
).attach();
}
public void saveValue() {
switch (pageSelected) {
case 0:
user.setUserPhoneNumber();
break;
case 1:
user.setUserEmail();
break;
}
}
static class SwipeAdapter extends FragmentStateAdapter {
public SwipeAdapter(@NonNull Fragment fragment) {
super(fragment);
}
@NonNull
@Override
public Fragment createFragment(int position) {
Fragment fragment = new Fragment();
switch (position) {
case 0:
fragment = new PhoneFieldFragment();
break;
case 1:
fragment = new EmailFieldFragment();
break;
}
return fragment;
}
@Override
public int getItemCount() {
return 2;
}
}
}
我想在 saveValue() 方法上使用 EditText 中的值。
解决方案
更好的方法是使用 SharedViewModel。
推荐阅读
- mysql - MySQL:获取每个部门的员工总数
- ios - 如何避免订阅时的 IAP 30% 费用(IOS 应用程序)?
- javascript - 如何将click事件的回调与keydown事件的回调结合起来?
- mysql - MySQL查询中行中的最大值
- sql - Oracle SQL - 创建“未存储”过程
- c++ - 如何使我的 sizeof sum 结构与空参数包一起工作
- azure - Azure webapp,设置 CURRENT_STACK
- vuetify.js - 更改导航抽屉和工具栏的默认字体颜色
- docker - 我需要多少个 docker 容器,我如何在它们之间分配代码?
- regex - 如何使用正则表达式忽略特定字符和新行