java - 双击退出应用程序
问题描述
我有登录活动和三个片段,即加载程序,主页,参加考勤。现在,当我在主页时,我希望我的应用程序通过点击后按退出。我已经成功实现了我的目标,但双重后按也适用于参加出勤片段这是我不想要的。在点击后按的出席片段中,它应该只是转到上一个片段,但它没有发生。
这是我的代码:-
MainActivity.java
@Override
public void onBackPressed() {
//for(int i=0;i<getFragmentManager().getBackStackEntryCount();i++)
Home_Screen home_screen = (Home_Screen) getFragmentManager().findFragmentByTag
("Home_Screen_Teacher");
if (home_screen != null && home_screen.isVisible()) {
DrawerLayout navigation_drawer = home_screen.getView().findViewById(R.id.drawer_layout);
if (navigation_drawer.isDrawerOpen(GravityCompat.START)) {
navigation_drawer.closeDrawer(Gravity.LEFT);
}
else {
if (backpressedTime + 2000 > System.currentTimeMillis()) {
this.finish();
System.exit(0);
return;
}
else {
second=(int)(backpressedTime/1000);
Snackbar.make(findViewById(R.id.home_screen_teacher),"Detach",Snackbar.LENGTH_LONG).show();
}
backpressedTime = System.currentTimeMillis();
//super.onBackPressed();
}
}
else{
super.onBackPressed();
}
}
加载器片段.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View loadder_fragment=inflater.inflate(R.layout.fragment_loader_fragment, container, false);
Loader=(AVLoadingIndicatorView)loadder_fragment.findViewById(R.id.loder_login);
handler=new Handler();
runnable=new Runnable() {
@Override
public void run() {
Loader.setVisibility(View.INVISIBLE);
timer.cancel();
fragmentManager=getFragmentManager();
fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.animator.slide_in_left,R.animator
.slide_out_left,R.animator.slide_in_right,R.animator.slide_out_right);
Home_Screen home_screen=new Home_Screen();
fragmentTransaction.replace(R.id.Home_screen_fragment_3,home_screen,
"Home_Screen_Teacher");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
};
timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.post(runnable);
}
}, 5000,5000);
return loadder_fragment;
}
Home_Screen Fragmnent.java
navigation_drawer=(DrawerLayout)Home_screen.findViewById(R.id.drawer_layout);
navigationView=(NavigationView)Home_screen.findViewById(R.id.Navigation_view_for_teacher);
home_screen_take_attendance_button=(Button)Home_screen.findViewById(R.id
.home_screen_take_attendance_button);
home_screen_take_attendance_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getActivity().getFragmentManager().beginTransaction().replace(R.id
.fragment_take_attendance,new Take_attendance(),"take_attendence")
.addToBackStack(null).commit();
}
});
Take_attendance 片段.java
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fragmentManager=getFragmentManager();
fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.animator.slide_in_left,R.animator .slide_out_left,R.animator.slide_in_right,R.animator.slide_out_right);
Home_Screen home_screen=new Home_Screen(); fragmentTransaction.replace(R.id.Home_screen_fragment1,home_screen,"Home_Screen_Teacher");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
//Some code
请帮忙。过去两天我一直陷入这个问题。我已经实现了我的目标,但是退出应用程序的双重压力也在我不想要的考勤片段中工作。
解决方案
onBackPressed()
在应用您的逻辑之前,检查您的后台堆栈上是否有任何片段。
例子:
@Override
public void onBackPressed() {
int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
if (backStackCount > 0) {
// returns to previous fragment
getSupportFragmentManager().popBackStack();
} else {
// apply your "double press" logic
super.onBackPressed();
}
}
推荐阅读
- c++ - CMake包含不同目录中的头文件
- android - 是否可以将条件类(基于前一个片段中的参数)注入视图模型?
- core-data - 在 SwiftUI 构造函数中使用 @Environment 变量的问题
- python - 如何从我创建的 csv 文件中读取
- list - 如何从列表中最佳地选择有效的整数对?
- android - 带有共享屏幕的 Android 导航组件弹出逻辑
- rust - 为什么不通过优化删除未使用的零初始化向量?
- oracle - 当我使用游标运行包时,ORA-00942 表或视图不存在
- python - 如何从 Django Crispy 的输入中删除表单组?
- while-loop - 如何使用 while 循环检查字符串中的特定字符?