在后按时显示启动画面而不是上次打开的屏幕
on back press splash screen showing instead of last opened screen
我正在做一个 android 申请。当我打开显示的应用程序启动画面,然后它转到 mainactivity。现在,如果用户按下后退按钮并从最小化按钮打开应用程序。它再次显示启动画面而不是 mainactivity。谁能帮我解决这个问题?以下是splash的代码activity请检查并给出解决方案
飞溅
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
fcm_id = FirebaseInstanceId.getInstance().getToken();
session = new SessionManager(getApplicationContext());
usermyid=session.userID();
if(usermyid!=null)
{
System.out.println("usermyid is not null"+usermyid);
usermyid=session.userID();
userd=Long.parseLong(usermyid);
}
else
{
System.out.println("usermyid is null"+usermyid);
android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID);
System.out.println("Without Exclude alphabets"+android_id);
android_id = android_id.replaceAll("[^\d.]", "");
System.out.println("After Exclude alphabets"+android_id);
long x=Long.parseLong(android_id);
x*=-1;
System.out.println("Final Id" + x);
session_id = String.valueOf(x);
System.out.println("sessionid in skipactivity" + session_id);
session.createLoginSession(session_id);
userd=Long.parseLong(session_id);
}
if (session.checkLogin()) {
if(userd < 0)
{
System.out.println("It is minus"+userd);
prefs = getApplicationContext().getSharedPreferences("MyPrefSKIP", Context.MODE_PRIVATE);
boolean rb0 = prefs.getBoolean("skipstuff", false);
if(rb0 == true){
// Do something
System.out.println("SKIP IS TRUE");
Intent i = new Intent(getApplicationContext(), MainActivity.class);
userid = session.userID();
username=session.username();
userlastname=session.userlastname();
useradd1=session.useradd1();
useradd2=session.useradd2();
usercity=session.usercity();
userstate=session.userstate();
userzip=session.userpincode();
usercountry=session.usercountry();
userphone=session.userphone();
usermail=session.useremail();
usercounter=session.usercounter();
System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry);
i.putExtra("id", userid);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
finish();
}
else
{
System.out.println("SKIP IS FALSE");
// String forskipid= String.valueOf(userd);
Intent menuLeft = new Intent(SplashActivity.this, SkipActivity.class);
//menuLeft.putExtra("id",session_id);
startActivity(menuLeft);
}
}
else
{
System.out.println("It is plus"+userd);
Intent i = new Intent(getApplicationContext(), MainActivity.class);
userid = session.userID();
username=session.username();
userlastname=session.userlastname();
useradd1=session.useradd1();
useradd2=session.useradd2();
usercity=session.usercity();
userstate=session.userstate();
userzip=session.userpincode();
usercountry=session.usercountry();
userphone=session.userphone();
usermail=session.useremail();
usercounter=session.usercounter();
System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry);
i.putExtra("id", userid);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
finish();
}
} else {
System.out.println("THIS SHOULD NOT BE SHOW");
}
//GetNotification();
AddDeviceToken();
SplashActivity.this.finish();
}
}, SPLASH_TIME_OUT);
}
主要活动
@Override
public void onBackPressed() {
if(getSupportFragmentManager().getBackStackEntryCount()>1){
getSupportFragmentManager().popBackStack();
}else
if(getSupportFragmentManager().getBackStackEntryCount()==0){
this.finish();
}
}
@Override
protected void onResume() {
super.onResume();
viewtocart();
}
@Override
protected void onStart() {
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
mGoogleApiClient.connect();
super.onStart();
}
在您的 SplashActivity 中,
在您要为 mainActivity 触发 Intent 时添加 finish()。
在您的 MainActivity 中,实现 onBackPressed()、onDestroy() 和 onResume();
希望这会有所帮助。
通常在 onBackPress 方法中,用户不应覆盖 it.It 通常由 android 系统维护以完成 activities.Change 你的 onBackPressed() 方法,并检查它是否有帮助你.
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0 &&
getSupportFragmentManager().findFragmentById(R.id.your_container)!=null) {
Fragment fragment= getSupportFragmentManager().findFragmentById(R.id.your_container);
if(fragment.getClass().getSimpleName().equalsIgnoreCase(FragmentTest.class.getSimpleName())){
getSupportFragmentManager().popBackStackImmediate();
}
}else {
super.onBackPressed();
}
}
编辑:
后退按钮并从最小化按钮打开应用程序
问题是 here.Since 您首先启动了 activity 启动,然后在进入主程序时清除标志并完成 splash.So 后退堆栈仅包含一个 activity.
当您在主 activity 中按下后退按钮时,应用程序将退出而不是在主 activities.Here 中显示任何后退按钮 activity 当您按下生命周期方法 onPause() ,onStop() 和 onDestroy() 被调用。
当您从最近再次打开应用程序时再次调用启动画面的原因是应用程序再次启动并且启动画面是第一个activity。因此显示。
在主页中按后退按钮 activity 会退出应用程序,但按主页按钮会最小化您的应用程序。最小化的应用程序会从您离开的位置打开应用程序,因为它会在内存中。
要了解有关 activity 生命周期的更多信息,请查看此 link https://developer.android.com/guide/components/activities/activity-lifecycle.html
我正在做一个 android 申请。当我打开显示的应用程序启动画面,然后它转到 mainactivity。现在,如果用户按下后退按钮并从最小化按钮打开应用程序。它再次显示启动画面而不是 mainactivity。谁能帮我解决这个问题?以下是splash的代码activity请检查并给出解决方案
飞溅
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
fcm_id = FirebaseInstanceId.getInstance().getToken();
session = new SessionManager(getApplicationContext());
usermyid=session.userID();
if(usermyid!=null)
{
System.out.println("usermyid is not null"+usermyid);
usermyid=session.userID();
userd=Long.parseLong(usermyid);
}
else
{
System.out.println("usermyid is null"+usermyid);
android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID);
System.out.println("Without Exclude alphabets"+android_id);
android_id = android_id.replaceAll("[^\d.]", "");
System.out.println("After Exclude alphabets"+android_id);
long x=Long.parseLong(android_id);
x*=-1;
System.out.println("Final Id" + x);
session_id = String.valueOf(x);
System.out.println("sessionid in skipactivity" + session_id);
session.createLoginSession(session_id);
userd=Long.parseLong(session_id);
}
if (session.checkLogin()) {
if(userd < 0)
{
System.out.println("It is minus"+userd);
prefs = getApplicationContext().getSharedPreferences("MyPrefSKIP", Context.MODE_PRIVATE);
boolean rb0 = prefs.getBoolean("skipstuff", false);
if(rb0 == true){
// Do something
System.out.println("SKIP IS TRUE");
Intent i = new Intent(getApplicationContext(), MainActivity.class);
userid = session.userID();
username=session.username();
userlastname=session.userlastname();
useradd1=session.useradd1();
useradd2=session.useradd2();
usercity=session.usercity();
userstate=session.userstate();
userzip=session.userpincode();
usercountry=session.usercountry();
userphone=session.userphone();
usermail=session.useremail();
usercounter=session.usercounter();
System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry);
i.putExtra("id", userid);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
finish();
}
else
{
System.out.println("SKIP IS FALSE");
// String forskipid= String.valueOf(userd);
Intent menuLeft = new Intent(SplashActivity.this, SkipActivity.class);
//menuLeft.putExtra("id",session_id);
startActivity(menuLeft);
}
}
else
{
System.out.println("It is plus"+userd);
Intent i = new Intent(getApplicationContext(), MainActivity.class);
userid = session.userID();
username=session.username();
userlastname=session.userlastname();
useradd1=session.useradd1();
useradd2=session.useradd2();
usercity=session.usercity();
userstate=session.userstate();
userzip=session.userpincode();
usercountry=session.usercountry();
userphone=session.userphone();
usermail=session.useremail();
usercounter=session.usercounter();
System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry);
i.putExtra("id", userid);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
finish();
}
} else {
System.out.println("THIS SHOULD NOT BE SHOW");
}
//GetNotification();
AddDeviceToken();
SplashActivity.this.finish();
}
}, SPLASH_TIME_OUT);
}
主要活动
@Override
public void onBackPressed() {
if(getSupportFragmentManager().getBackStackEntryCount()>1){
getSupportFragmentManager().popBackStack();
}else
if(getSupportFragmentManager().getBackStackEntryCount()==0){
this.finish();
}
}
@Override
protected void onResume() {
super.onResume();
viewtocart();
}
@Override
protected void onStart() {
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
mGoogleApiClient.connect();
super.onStart();
}
在您的 SplashActivity 中, 在您要为 mainActivity 触发 Intent 时添加 finish()。
在您的 MainActivity 中,实现 onBackPressed()、onDestroy() 和 onResume();
希望这会有所帮助。
通常在 onBackPress 方法中,用户不应覆盖 it.It 通常由 android 系统维护以完成 activities.Change 你的 onBackPressed() 方法,并检查它是否有帮助你.
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0 &&
getSupportFragmentManager().findFragmentById(R.id.your_container)!=null) {
Fragment fragment= getSupportFragmentManager().findFragmentById(R.id.your_container);
if(fragment.getClass().getSimpleName().equalsIgnoreCase(FragmentTest.class.getSimpleName())){
getSupportFragmentManager().popBackStackImmediate();
}
}else {
super.onBackPressed();
}
}
编辑:
后退按钮并从最小化按钮打开应用程序
问题是 here.Since 您首先启动了 activity 启动,然后在进入主程序时清除标志并完成 splash.So 后退堆栈仅包含一个 activity.
当您在主 activity 中按下后退按钮时,应用程序将退出而不是在主 activities.Here 中显示任何后退按钮 activity 当您按下生命周期方法 onPause() ,onStop() 和 onDestroy() 被调用。
当您从最近再次打开应用程序时再次调用启动画面的原因是应用程序再次启动并且启动画面是第一个activity。因此显示。
在主页中按后退按钮 activity 会退出应用程序,但按主页按钮会最小化您的应用程序。最小化的应用程序会从您离开的位置打开应用程序,因为它会在内存中。
要了解有关 activity 生命周期的更多信息,请查看此 link https://developer.android.com/guide/components/activities/activity-lifecycle.html