当我背压片段屏幕重叠时

问题描述

error description

我是使用 Fragment 的新手。如上图所示,在某些情况下按下返回按钮时会出现重叠屏幕的问题。 有时使用replace而不是addToBackstack并尝试通过将onBackpressed函数放入活动中进行控制并且碎片化失败。我想知道代码有什么问题。我被这个问题困扰了几天:(

主活动

public class MainActivity extends FragmentActivity implements BottomNavigationView.OnNavigationItemSelectedListener {
final String TAG = "MainActivity";
BottomNavigationView bottomNavigationView;
public Fragment fragmentA,fragmentB;
public Fragment fragmentB_1;

public static final int B_1_FRAGMENT = 1003;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.i(TAG,"onCreate");

    if (findViewById(R.id.fragment_container) != null) {
        if (savedInstanceState != null) {
            return;
        }
        fragmentinit();
    }
    bottomNavigationInit();
}

private void fragmentinit() {
    fragmentA = new FragmentA();
    fragmentB = new FragmentB();
    
    fragmentB_1 = new FragmentB_1();

    fragmentA.setArguments(getIntent().getExtras());
    getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,fragmentA,"a").commit();
}

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_a) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,"a")
                .commit();
    } else if (id == R.id.action_b) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,fragmentB,"b")
                .commit();
    } else {
        Log.i(TAG,"onNavigationItemSelected else");
    }

    return true;
}

private void bottomNavigationInit() {
    bottomNavigationView = findViewById(R.id.bottomNavigationView);
    bottomNavigationView.setonNavigationItemSelectedListener(this);
}

public void changeFragment(int index) {
    switch (index) {
        
        case B_1_FRAGMENT:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,fragmentB_1)
                    .addToBackStack("b_1").commit();
            break;
        /*
        *  ... 
        * 
        * */
    }
}}

片段 A

...nothing Special

片段 B

public class FragmentB_1 extends Fragment implements View.OnClickListener{
MainActivity activity;
View view;
CardView cvFramgentB1;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.fragment_calculator,container,false);
    btnInit();
    return view;
}
private void btnInit() {
    cvFramgentB1 = view.findViewById(R.id.cv_fragmentB_1);
}
@Override
public void onStart() {
    super.onStart();
    cvFramgentB1.setonClickListener(this);
}
@Override
public void onClick(View v) {
    int id = v.getId();
    if (id == R.id.cv_proficiency) {
        activity.changeFragment(B_1_FRAGMENT);
    }
}
@Override
public void onAttach(@NonNull Context context) {
    super.onAttach(context);
    activity = (MainActivity) getActivity();
}
@Override
public void onDetach() {
    super.onDetach();
    activity = null;
}}

片段 B_1

...nothing Special

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)