2014-12-04 2 views
1

я следующий стек деятельности в моем приложении: активности A -> B активностьКак прекратить все действия в стеке

Обычно, если приложение показывает активность B, нажав на кнопку назад вернусь А. Это отлично. Теперь у меня есть кнопка в действии B, которая в основном завершает все приложение, потому что я хочу, чтобы пользователь мог прекратить действие приложения при любой операции. Когда я нажимаю кнопку, я хочу, чтобы приложение прекратило все действия и вернулось на главный экран.

Однако, поскольку у меня есть действия в стеке, вызов функции finish() в действии B просто вернется к A. Как его реализовать, чтобы активность A также была уничтожена? Я все еще хочу, чтобы сохранить активность А в стеке, если создание активности B от A.

Вот мой код, но я не думаю, что это очень помогает:

кнопку в деятельности по

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button b = (Button) findViewById(R.id.button1); 
    b.setText("Start ActB"); 
    b.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), ActivityB.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(intent); 
     } 
    }); 
} 

кнопка в активность B

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button b = (Button) findViewById(R.id.button1); 
    b.setText("Finish"); 
    b.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
} 

ответ

0

Я нашел способ обойти его: используя, setResult() и onActivityResult вместе.

Вот что у меня есть:

ActivityA:

public static final int RESULT_CODE_FINISH = 1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button b = (Button) findViewById(R.id.button1); 
    b.setText("Start ActB"); 
    b.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), ActivityB.class); 
      startActivity(intent); 
     } 
    }); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    switch (resultCode) { 
     case RESULT_CODE_FINISH: 
      this.finish(); 
      break; 
     default: 
      break; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

ActivityB:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button b = (Button) findViewById(R.id.button1); 
    b.setText("Finish"); 
    b.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      setResult(ActivityA.RESULT_CODE_FINISH); 
      finish(); 
     } 
    }); 
} 
1

Для очистки всех видов деятельности на вершине ActivityA вы должны сделать что-то вроде этого.

Intent intent = new Intent(getApplicationContext(), ActivityA.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

Для перезагрузки приложения вы должны сделать что-то вроде этого:

Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName()); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

Для закрытия приложения на кнопку в ActivityB вы должны использовать это:

System.exit(0); 
+0

Я попробовал, что это не работает – MadvsFool

+0

ли вы заменить в B деятельности отделку() метод для код выше? – JpCrow

+0

Зачем мне нужно активировать активность A в активности B? – MadvsFool

Смежные вопросы