Android: убить активность - PullRequest
0 голосов
/ 19 января 2019

У меня есть активность, когда пользователь вводит свой ник. Я не хочу возвращаться после этого. Я перепробовал все, но не повезло. Пока пробовал:

Manifest

 <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 голосов
/ 20 января 2019

В NewUserActivity переопределите метод OnBackPressed () затем вызовите финиш; убить текущую активность; Смотрите пример реализации ниже:

@ Override public void onBackPressed () {

                    killActivity();

            })
            .setNegativeButton("No", null)
            .show();
}

private void killActivity() {
    finish();
}
0 голосов
/ 20 января 2019

Однократная настройка?

Исходя из моего понимания, вам нужна однократная настройка Упражнение.Ваш код в порядке, единственная проблема, которую я вижу, заключается в том, что при повторном открытии приложения оно начинается с самого начала.Это связано с тем, что в вашем коде нет логики, чтобы проверить, выполнили ли вы одноразовую настройку.Для этого вы можете использовать SharedPreference.
. Вы можете создать Splash Activity и проверить, выполнена ли разовая настройка или нет на основе логического флага.

Итак, я предлагаю в первый раз открыть приложение
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);
}

Соответствующие ссылки

Если вы не знаете Что такое SharedPreference?
Если вы не знаете, как использовать SharedPreference , отметьте

0 голосов
/ 20 января 2019

с более новой версией Android> = API 16 использовать finishAffinity ()

finishAffinity (); сделал свое дело.

Поскольку я читаю везде, предлагается использовать просто finish (); Для более нового API (я использую> = 17) пришлось использовать finishAffinity ();

0 голосов
/ 20 января 2019

Вы можете использовать этот код:

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