我有一个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中的值。
4条答案
按热度按时间ukdjmx9f1#
获取
EditText
的值应该在片段类中完成。为了从片段中获取EditText
的值,应该从SwipeAdapter
类中删除2个get方法,并将findViewById()
调用放置在片段类中,如下所示:字符串
我更新了
SwipeAdapter
以接受片段列表,如下所示:型
我创建了一个viewModel类,它保存
LiveData
对象中EditText字段的值。然后从活动(或片段)观察这些字段。代码如下:型
我还添加了生命周期依赖项。
最后,下面是Activity的代码:
型
This is a link to the entire codebase on github
编辑
我使用了一个共享的viewModel类,它连接viewPager片段和它们的主机Activity(或者根据具体情况连接另一个片段)。当用户使用
TextWatcher
输入时,我从EditText获取文本。kzipqqlq2#
在你的Fragment代码中进行这些操作。这将是干净的,使维护容易。
uurity8g3#
更好的方法是使用SharedViewModel。
ej83mcc04#
对我很有效
字符串