我的应用程序的注册页面分为三个片段。 FragmentA
、FragmentB
和 FragmentC
附加到同一活动。单击 FragmentA
中的下一个按钮时,它将调用 FragmentB
,FragmentB
和 FragmentC
也是如此。当我向前移动时,前一个片段的按钮与当前的按钮重叠。下面是我的代码。我怎样才能避免这种情况?
MainActivity.class
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.signup_page);
init();
}
private void init() {
ViewPager2 viewPager = findViewById(R.id.signup_pager);
List<Fragment> fragmentList = new ArrayList<Fragment>();
FragmentA aFragment = new FragmentA();
FragmentB bFragment = new FragmentB();
fragmentList.add(aFragment);
fragmentList.add(bFragment);
SignupFragmentPagerAdapter signupFragmentPagerAdapter = new SignupFragmentPagerAdapter(this,fragmentList);
viewPager.setUserInputEnabled(false);
viewPager.setAdapter(signupFragmentPagerAdapter);
}
}
FragmentA.class
public class FragmentA extends Fragment {
EditText et_name;
Spinner sp_user_type;
Button bt_next;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fraga,container,false);
et_name = view.findViewById(R.id.editTextTextPersonName);
sp_user_type = view.findViewById(R.id.user_spinner);
bt_next = view.findViewById(R.id.button8);
bt_next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentB bFragment = new FragmentB();
FragmentManager manager = getParentFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.frag_a, bFragment);
transaction.addToBackStack(null);
transaction.commit();
}
});
return view;
}
}
FragmentB.class
public class FragmentB extends Fragment {
Button bt_next;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragb,container,false);
bt_next = view.findViewById(R.id.button9);
bt_next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentC cFragment = new FragmentC();
FragmentManager manager = getParentFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.frag_b, Fragment);
transaction.addToBackStack(null);
transaction.commit();
}
});
return view;
}
}
答案 0 :(得分:0)
问题的原因:
您正在片段 A 内进行片段交易(从 A 到 B);而不是通过这些片段的占位符(在您的情况下是 ViewPager
本身;所以 MainActivity
仍然看到 ViewPager
位于第一页,因此在背景。
您有两种选择来解决这个问题:
ViewPager
.. 所以你可以在
主要活动,并在此占位符上进行片段交易。ViewPager
,而不是制作
片段交易,你可以使用
viewPager.setCurrentItem(position)
并将位置设置为
根据您在适配器中添加它们的顺序来定位片段。
当您点击按钮时,您可以通过片段执行此操作:((MainActivity)requireActivity()).myViewPager.setCurrentItem(position)