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

时间:2021-01-07 16:52:20

标签: java android android-fragments android-viewpager

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

enter image description here

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

1 个答案:

答案 0 :(得分:0)

问题的原因:

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

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

  • 第一:由于您禁用了页面滚动;我看不出有什么用 ViewPager .. 所以你可以在 主要活动,并在此占位符上进行片段交易。
  • 第二:如果您需要ViewPager,而不是制作 片段交易,你可以使用 viewPager.setCurrentItem(position) 并将位置设置为 根据您在适配器中添加它们的顺序来定位片段。 当您点击按钮时,您可以通过片段执行此操作:

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