要实现按下返回键时返回到第一个片段,可以使用以下代码示例:
首先,在MainActivity
中添加一个FragmentManager
对象和一个FragmentTransaction
对象作为成员变量:
private FragmentManager fragmentManager;
private FragmentTransaction fragmentTransaction;
然后,在onCreate()
方法中初始化这些对象:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
// 添加第一个片段到容器中
fragmentTransaction.add(R.id.fragment_container, new FirstFragment());
fragmentTransaction.commit();
}
接下来,在MainActivity
中重写onBackPressed()
方法:
@Override
public void onBackPressed() {
// 获取当前显示的片段
Fragment currentFragment = fragmentManager.findFragmentById(R.id.fragment_container);
// 如果当前显示的片段不是第一个片段,则返回到第一个片段
if (!(currentFragment instanceof FirstFragment)) {
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new FirstFragment());
fragmentTransaction.commit();
} else {
// 如果当前显示的片段是第一个片段,则执行默认的返回操作
super.onBackPressed();
}
}
最后,在FirstFragment
中添加一个按钮,点击按钮时跳转到第二个片段:
public class FirstFragment extends Fragment {
// ...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_first, container, false);
Button button = view.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 跳转到第二个片段
FragmentTransaction fragmentTransaction = getParentFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new SecondFragment());
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
return view;
}
}
这样,当按下返回键时,如果当前显示的片段不是第一个片段,则会返回到第一个片段;如果当前显示的片段是第一个片段,则执行默认的返回操作。