Убийство одного действия от другого
У меня есть два действия A и B. B - прозрачный проход через активность, и A видно. Я хочу убить B, нажав кнопку A.
Вот что я пробовал до сих пор:
B obj=new B();
obj.finish();
Я создал объект B и попытался его убить. Это не сработало.
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("keep", true);
startActivity(intent);
То, что должен сделать этот код, - это очистить верхнюю часть активности, которая является B и снова называть B, за исключением того, что я передаю такое значение, чтобы B убил себя через несколько секунд.
По какой-то причине это только сбивало больше случаев активности. Или, по крайней мере, я думаю, что произошло, потому что экран стал пиксельным из-за многих прозрачных действий.
Вот мой манифест:
<activity
android:name="com.xxx.xxx.B"
android:excludeFromRecents="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:clearTaskOnLaunch="true" >
</activity>
Что мне нужно сделать, чтобы, когда я нажимаю кнопку, когда активность отображается, а второй раз ее убивает? Очевидно, что часть создания позаботилась. Моя активность B всплывает, я хочу убить ее сейчас, когда B находится сверху.
ИЗМЕНИТЬ
Я попробовал это с checkbox, вот код:
enable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
finishActivity(0);
Intent intent = new Intent(A.this, B.class);
if (enable.isChecked()) {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("keep", true);
intent.putExtra("value", 10);
startActivityForResult(intent, 0);
}
else
{
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("keep", false);
startActivityForResult(intent, 0);
}
}
});
Когда включена опция enable, вызывается действие, которое работает нормально. Но они продолжают накапливаться. Это не похоже на A- > B- > A- > B, когда я проверяю и снимаю флажок checkBox. Это A- > B- > BB- > BBB
Ответы
Ответ 1
Вы можете попытаться непосредственно убить действие, вызвав статический метод в этом действии:
Активность A должна иметь переменную
static ActivityA activityA;
В состоянии onCreate:
activityA = this;
и добавьте этот метод:
public static ActivityA getInstance(){
return activityA;
}
В действии B вызовите функцию getInstance()
ActivityA.getInstance().finish();
Ответ 2
Вы можете остановить другое действие, вызвав Activity.finish(). Кроме того, вы можете использовать Activity.finishActivity() для завершения действия, начатого startActivityForResult().
Ответ 3
Я нашел хороший способ закончить одну деятельность от другой, она похожа на то, что сделал Люмис.
Поэтому, если вы хотите закрыть ActivityA из ActivityB, вы можете сделать это:
В ActivityA do:
className = this.getClass().getName();
и передать его в AvtivityB. Затем в ActivityB выполните:
((Activity) Class.forName(className).newInstance()).finish();
Вы можете поместить строку с именем своего класса в className самостоятельно, но она также должна быть полным именем с пакетом.
Ответ 4
Создать статическую переменную класса для сохранения экземпляра: static sampleActivity sampleActivity;
Вкл. Создание первой операции сохраните экземпляр, например: инцидентная активность = это;
Создайте статический метод для получения экземпляра:
public static SampleActivity getInstance(){
return sampleActivity;
}
где вы хотите позвонить:
SampleActivity.getInstance().finish();
он действительно работает,
С уважением,