我有一个活动,用户在其中输入他的昵称。我想以后不能再回去了。我已经尝试了一切,但没有运气。到目前为止尝试过:
清单
<activity
android:name=".NewUserActivity"
android:noHistory="true" />
<activity android:name=".PvP.PVPWinningActivity" />
活动中:
btnEnterDungeons.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!TextUtils.isEmpty(editUsername.getText().toString().trim())) {
uploadUserData();
Intent intent = new Intent();
intent.setClass(NewUserActivity.this, GameChooseActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();
}
或再次在“活动”中:
btnEnterDungeons.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!TextUtils.isEmpty(editUsername.getText().toString().trim())) {
uploadUserData();
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.setClass(NewUserActivity.this, GameChooseActivity.class);
startActivity(intent);
finish();
}
这些作品都没有。实际上,我想彻底取消活动,没有后退按钮或以任何方式再次访问。
答案 0 :(得分:1)
在NewUserActivity中,重写OnBackPressed()方法 然后呼叫完成;杀死当前活动; 请参见下面的示例实现:
@Override public void onBackPressed(){
killActivity();
})
.setNegativeButton("No", null)
.show();
}
private void killActivity() {
finish();
}
答案 1 :(得分:0)
您可以使用以下代码:
Intent intent=new Intent(NewUserActivity.this, GameChooseActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
NewUserActivity.this.finish();
答案 2 :(得分:0)
根据我的理解,您希望进行一次设置活动。您的代码很好,我看到的唯一问题是,当您再次打开应用程序时,它从头开始。这是因为代码中没有逻辑来检查您是否已经进行了一次设置。为此,您可以使用SharedPreference
。
您可以创建一个启动活动,并根据布尔标志检查一次性设置是否完成。
所以我建议的是这是用户第一次打开应用程序
SplashActivity-> NewUserActivity ---> GameChooseActivity
不然
SplashActivity-> GameChooseActivity
SplashActivity extends AppcompatActivity{
boolean hasDoneSetUp = false;
private SharedPreferences pref;
private Editor editor;
protected void onCreate(Bundle sis)
{
super.onCreate(sis);
setContentView(R.layout.splash);
pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
editor = pref.edit();
hasDoneSetUp = checkForSetUp();
if(!hasDoneSetUp)
startOneTimeSetUp();
else
startGameChooseActivity();
}
}
一次性设置完成后,将hasDoneSetUp
设置为true并将此值保存在SharedPreference
中,以便再次打开应用程序时,它将检查一次性设置是否完成
将其他数据保存在SharedPreference或SQLiteDatabase中,然后在GameChooseActivity中检索这些数据。
public void startOneTimeSetUp(){
if(!TextUtils.isEmpty(editUsername.getText().toString().trim())) {
uploadUserData();
Intent intent = new Intent(SplashActivity.this, GameChooseActivity.class);
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
Editor editor = pref.edit();
editor.putBoolean("hasDoneSetup", true);
editor.commit();
finish();
}
}
public boolean checkForSetUp(){
return pref.getBoolean("hasDoneSetup", true);
}
public void startGameChooseActivity(){
Intent intent = new Intent(SplashActivity.this, GameChooseActivity.class);
startActivity(intent);
}
如果您不认识What is SharedPreference?
如果您不知道如何使用SharedPreference check this
答案 3 :(得分:0)
对于Android的较新版本> = API 16,请使用finishAffinity()
finishAffinity();做到了。
正如我在各处读到的,建议只使用finish();对于较新的API(我使用> = 17),必须使用finishAffinity();