问题描述
我是使用 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 (将#修改为@)