【问题标题】:Button inside fragment overlap with next fragment's button片段内的按钮与下一个片段的按钮重叠
【发布时间】:2021-01-07 16:52:20
【问题描述】:

我的应用的注册页面分为三个片段。 FragmentAFragmentBFragmentC 附加到同一活动。单击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;
    }
}

【问题讨论】:

  • 为什么你在禁用它的滑动时使用ViewPager.. 我认为它没用

标签: java android android-fragments android-viewpager


【解决方案1】:

问题的原因:

您正在 Fragment A 本身内进行 Fragment 事务(从 A 到 B);而不是通过这些片段的占位符(在您的情况下是ViewPager 本身;所以MainActivity 仍然看到ViewPager 在第一页,因此在后台显示片段A。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多