当我启动我的应用程序时,我的第一个片段已启动。在那个片段中,我单击一个按钮,用新的片段替换原始的片段。当我点击这个第二片段时,它不会返回到第一片段,而是关闭应用程序并返回到手机的主屏幕。有人知道为什么吗?
以下是我的活动中创建的原始片段onCreate方法:
public class Main extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LoginFragment firstFragment = new LoginFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, firstFragment);
ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
}}
以下是此Fragment的代码,其中包含显示第二个片段的按钮:
public class LoginFragment extends Fragment implements View.OnClickListener {
private FragmentTransaction ft;
private Button registerButton;
public LoginFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_login, container, false);
registerButton = (Button)view.findViewById(R.id.register_button);
registerButton.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.register_button:{
RegisterFragment registerFragment = new RegisterFragment();
ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, registerFragment);
ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
break;
}
}
}}
启动的第二个片段现在不包含任何内容。无论如何,当我在第二片时我按下我的手机时,它不会返回我的第一片。
答案 0 :(得分:1)
您似乎忘了在容器活动中实现onBackPressed
方法:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0 ){
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}