Android:杀死活动

时间:2019-01-19 14:51:06

标签: android android-activity back-button

我有一个活动,用户在其中输入他的昵称。我想以后不能再回去了。我已经尝试了一切,但没有运气。到目前为止尝试过:

清单

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

这些作品都没有。实际上,我想彻底取消活动,没有后退按钮或以任何方式再次访问。

4 个答案:

答案 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();

相关问题