Java 清除活动意图上的导航堆栈
我在应用程序开始时有一个登录视图。此视图中的登录将手动完成(即在代码中调用Java 清除活动意图上的导航堆栈,java,android,Java,Android,我在应用程序开始时有一个登录视图。此视图中的登录将手动完成(即在代码中调用finish())。这样,当用户想要退出应用程序时,就不必在登录页面上按下后退按钮 现在我想在应用程序中有一个注销按钮。这将调用登录视图(旨在删除任何以前存储的登录凭据,即模拟注销) 我需要做的是清除这个目的上的向后导航堆栈,否则用户仍然能够按back键查看他们最初导航的应用程序 现在,Intent.FLAG\u ACTIVITY\u CLEAR\u TOP不起作用,我想是因为我finish()登录活动意味着该活动不在后台
finish()
)。这样,当用户想要退出应用程序时,就不必在登录页面上按下后退按钮
现在我想在应用程序中有一个注销
按钮。这将调用登录视图(旨在删除任何以前存储的登录凭据,即模拟注销)
我需要做的是清除这个目的上的向后导航堆栈,否则用户仍然能够按back键查看他们最初导航的应用程序
现在,Intent.FLAG\u ACTIVITY\u CLEAR\u TOP
不起作用,我想是因为我finish()
登录活动意味着该活动不在后台堆栈中。我还使用了Intent.FLAG\u ACTIVITY\u NEW\u TASK
,它似乎也不起作用。用户仍然可以按“后退”按钮,并在应登录才能访问的活动中向后导航
因此,我需要做的是创建登录活动的实例,并使其成为我的应用程序的新root
活动
我该怎么做
谢谢您应该将登录状态保存到本地数据存储(您可以使用SharedReferences、应用程序类或DB) 然后,在活动的onStart()方法中,您应该检查登录状态,并向用户显示相应的UI 换句话说,跟踪应用程序中某个位置的登录状态,然后在每次显示活动时检查该状态,以确定是否应显示登录视图
无论活动的入口点是什么,您都可以控制向用户显示的内容。您应该将登录状态保存到本地数据存储(您可以使用SharedReferences、应用程序类或DB) 然后,在活动的onStart()方法中,您应该检查登录状态,并向用户显示相应的UI 换句话说,跟踪应用程序中某个位置的登录状态,然后在每次显示活动时检查该状态,以确定是否应显示登录视图 无论活动的入口点是什么,您都可以控制向用户显示的内容。试试看
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
这是一个对我来说很好的应用程序
homeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent( _context, MainMenuActivity.class );
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
_context.startActivity( intent );
finish();
overridePendingTransition(R.anim.slide_right,R.anim.slide_right);
}
});
试一试
这是一个对我来说很好的应用程序
homeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent( _context, MainMenuActivity.class );
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
_context.startActivity( intent );
finish();
overridePendingTransition(R.anim.slide_right,R.anim.slide_right);
}
});
是的,这是个好主意。我将期待着在未来实现这一目标。不过,就目前而言,我将努力找到自己的工作方式。:)是的,这是个好主意。我将期待着在未来实现这一目标。不过,就目前而言,我将努力找到自己的工作方式。:)