片段内的按钮与下一个片段的按钮重叠

Button inside fragment overlap with next fragment's button

我的应用程序的注册页面分为三个片段。 FragmentAFragmentBFragmentC 附加到同一个 activity。单击 FragmentA 中的下一个按钮时,它将调用 FragmentBFragmentBFragmentC 也是如此。当我向前移动时,前一个片段的按钮与当前片段重叠。下面是我的代码。我怎样才能避免这种情况?

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;
    }
}

问题原因:

您正在片段A本身内进行片段交易(从A到B);而不是通过这些片段的占位符(在你的情况下是 ViewPager 本身;所以 MainActivity 仍然看到 ViewPager 在第一页,因此在背景.

你有两种选择来解决这个问题:

  • 首先:由于您禁用了页面滚动;我看不出有什么用 ViewPager .. 所以你可以在 main activity,并在此占位符上进行片段交易。
  • 其次:如果你有需要就ViewPager,而不是制作 片段交易,你可以使用 viewPager.setCurrentItem(position) 并将位置设置为 目标片段根据您在适配器中添加它们的顺序。 当你点击按钮时,你可以从你的片段中做到这一点:

((MainActivity)requireActivity()).myViewPager.setCurrentItem(position)