Android:杀死一个 activity
Android: Killing an activity
我有一个 activity 用户输入昵称的地方。我希望在此之后无法返回。我已经尝试了一切但没有运气。到目前为止已尝试:
清单
<activity
android:name=".NewUserActivity"
android:noHistory="true" />
<activity android:name=".PvP.PVPWinningActivity" />
在Activity中:
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();
}
或再次 Activity:
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();
}
None 这些作品。实际上,我想完全关闭 activity,没有后退按钮或任何重新访问的方式。
您可以使用此代码:
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();
一次性设置?
根据我的理解,您需要一次性设置 Activity。您的代码很好,我看到的唯一问题是,当您再次打开应用程序时,它会从头开始。这是因为您的代码中没有逻辑来检查您是否已经完成了一次性设置。为此,您可以使用 SharedPreference
.
您可以创建一个 Splash Activity 并根据布尔标志检查一次性设置是否完成。
So what I am suggesting is this first time the user opens the app
SplashActivity-->NewUserActivity--->GameChooseActivity
otherwise
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
使用 Android 的较新版本 >= API 16 使用 finishAffinity()
finishAffinity();成功了。
正如我在各处所读到的那样,建议只使用 finish();对于较新的 API (我使用 >= 17 )必须使用 finishAffinity();
在 NewUserActivity 中,覆盖 OnBackPressed() 方法
然后调用完成;杀死当前 activity;
请参阅下面的示例实现:
@Override
public void onBackPressed() {
killActivity();
})
.setNegativeButton("No", null)
.show();
}
private void killActivity() {
finish();
}
我有一个 activity 用户输入昵称的地方。我希望在此之后无法返回。我已经尝试了一切但没有运气。到目前为止已尝试:
清单
<activity
android:name=".NewUserActivity"
android:noHistory="true" />
<activity android:name=".PvP.PVPWinningActivity" />
在Activity中:
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();
}
或再次 Activity:
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();
}
None 这些作品。实际上,我想完全关闭 activity,没有后退按钮或任何重新访问的方式。
您可以使用此代码:
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();
一次性设置?
根据我的理解,您需要一次性设置 Activity。您的代码很好,我看到的唯一问题是,当您再次打开应用程序时,它会从头开始。这是因为您的代码中没有逻辑来检查您是否已经完成了一次性设置。为此,您可以使用 SharedPreference
.
您可以创建一个 Splash Activity 并根据布尔标志检查一次性设置是否完成。
So what I am suggesting is this first time the user opens the app
SplashActivity-->NewUserActivity--->GameChooseActivity
otherwise
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
使用 Android 的较新版本 >= API 16 使用 finishAffinity()
finishAffinity();成功了。
正如我在各处所读到的那样,建议只使用 finish();对于较新的 API (我使用 >= 17 )必须使用 finishAffinity();
在 NewUserActivity 中,覆盖 OnBackPressed() 方法 然后调用完成;杀死当前 activity; 请参阅下面的示例实现:
@Override public void onBackPressed() {
killActivity();
})
.setNegativeButton("No", null)
.show();
}
private void killActivity() {
finish();
}