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();
}