Ответ 1
У меня была эта проблема несколько дней назад, и я рад сообщить вам, что нашел способ обойти это.
Прежде всего, к активности, которую вы хотите остановить, добавьте это в AndroidManifest.xml
:
android:launchMode="singleTop"
Я собираюсь использовать пример CheckBox. Когда он проверяет, что активность запущена, и когда unchecked уничтожит действие,
Пример Действие A вызывает активность B, а затем убивает его, используя намерение.
Код, который нужно поместить в A:
checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(A.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
if (enable.isChecked()) {
intent.putExtra("keep", true);
startActivity(intent);
}
else
{
intent.putExtra("keep", false);
startActivity(intent);
}
}
});
Код, который нужно поместить в B:
boolean keep;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.B);
intent = this.getIntent();
boolean keep = intent.getExtras().getBoolean("keep");
if(keep==true)
{
//execute your code here
}
}
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
keep = intent.getExtras().getBoolean("keep");
if(keep==false)
{
B.this.finish();
}
}
Объяснение: В основном это происходит, когда флажок установлен, он вызывает активность и передает логическое значение, если оно истинно, активность сохраняется и выводится на передний план. Теперь, если вы не передадите флаг singleTop
, тогда будет создано множество экземпляров этого действия. singleTop
гарантирует, что будет вызываться только один и тот же экземпляр. Теперь, когда флажок снят, новое значение для keep передается, которое проверено в B. Если он не отмечен, операция A будет передавать значение false, и, следовательно, B завершает себя с помощью функции onNewIntent()
.
Надеюсь, что это поможет!
P.S - Вы можете закрыть Activity B из другого действия. Просто используйте Если другое действие - C:
Intent intent = new Intent(C.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("keep", false);
startActivity(intent);